Ошибка Android Jelly Bean MeasureSpec

У меня была эта проблема: https://stackoverflow.com/questions/20121696/slidingmenu-bug-in-android-4-3
Но теперь я исправил и хочу поделиться своим решением, потому что, возможно, оно тоже кому-то понадобится.
Я сам отвечу на этот вопрос ниже.


person GuilhE    schedule 22.11.2013    source источник
comment
Я тоже столкнулся с этой проблемой возвращает 16777215 на Android 4 2 2 "> stackoverflow.com/questions/28798288/   -  person Madhur Ahuja    schedule 02.03.2015


Ответы (1)


Итак, проблема, с которой я столкнулся, заключается в том, что Build.VERSION_CODES.JELLY_BEAN_MR2 имеет проблему, когда мы хотим создать MeasureSpec:

MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams..., MeasureSpec.EXACTLY);

С MeasureSpec.EXACTLY, когда я выполняю, например, .measure(widthMeasureSpec, heightMeasureSpec);, он возвращает совершенно странные значения, поэтому эту проблему можно решить, если мы используем MeasureSpec.AT_MOST вместо MeasureSpec.EXACTLY.


Надеюсь, это поможет кому-то в будущем ;)
ps: Я не знаю, есть ли эта проблема в Android Kitkat (4.4, API 19).

EDIT: это так.

int widthMeasureSpec;
int heightMeasureSpec;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
    widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.MATCH_PARENT, View.MeasureSpec.AT_MOST);
    heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.AT_MOST);
} else {
    widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.MATCH_PARENT, View.MeasureSpec.EXACTLY);
    heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT, View.MeasureSpec.EXACTLY);
}
person GuilhE    schedule 22.11.2013
comment
какой смысл передавать WRAP_CONTENT в качестве первого параметра для nakeMeasureSpec? - person pskink; 22.11.2013
comment
@pskink, потому что в моем XML я объявил layout_width=wrap_content и layout_height=match_parent, и я думаю (не уверен в этом на 100%), когда я создаю MeasureSpec, я должен использовать ту же настройку. - person GuilhE; 23.11.2013
comment
или, если вы не хотите анализировать исходный код, создайте собственное представление, установите layout_width в wrap_content, переопределите onMeasure и зарегистрируйте MeasureSpec.toString(), передав первый параметр onMeasure - person pskink; 23.11.2013
comment
В Kitkat и Lollipop такой проблемы нет. - person Madhur Ahuja; 02.03.2015