我有一个布局为width == match_parent
的布局(并且它的所有父级也是width == match_parent
)。
在此布局中,有一个width == wrap_content
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.design.chip.Chip
android:id="@+id/my_account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/og_my_account_desc_long_length"/>
<View
android:id="@+id/divider"
style="@style/DividerStyle"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/accounts_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/account_list_item"/>
</LinearLayout>
我在布局Java代码中有这个
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (myAccountView.getVisibility() == GONE) {
return;
}
MarginLayoutParams layoutParams = (MarginLayoutParams) myAccountView.getLayoutParams();
int currentTextMaxWidth =
MeasureSpec.getSize(widthMeasureSpec)
- (getPaddingLeft()
+ getPaddingRight()
+ myAccountView.getPaddingLeft()
+ myAccountView.getPaddingRight()
+ layoutParams.leftMargin
+ layoutParams.rightMargin);
// Optimization: skip changing text and re-measuring when available space hasn't changed
// from last call to this method.
if (currentTextMaxWidth == lastTextMaxWidth) {
return;
}
lastTextMaxWidth = currentTextMaxWidth;
myAccountView.setText(getLongestPossibleChipText(currentTextMaxWidth));
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
每次我调用super.onMeasure()时,都会看到另一个对onMeasure()的调用
作为父母有意义的有height==wrap_content
但是,上一次我的优化阻止了对super.onMeasure()
的另一个调用,但是我仍然看到布局onMeasure
被调用了(上面的代码)。
这可能是什么原因?
顺便说一句,布局尺寸增加了,我不确定为什么。