Android: как предотвратить ретрансляцию всей иерархии при обновлении View?
У меня есть следующая иерархия:
<RelativeLayout
android:id="@+id/activity_main"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="example.com.hellorelayout.MainActivity"
>
<example.com.hellorelayout.MyFrameLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#f00"
android:tag="frame1"
>
<TextView
android:id="@+id/hello1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello 1"
android:layout_gravity="center"
/>
</example.com.hellorelayout.MyFrameLayout>
<example.com.hellorelayout.MyFrameLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="120dp"
android:background="#ff0"
android:tag="frame2"
>
<TextView
android:id="@+id/hello2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello 2"
android:layout_gravity="center"
/>
</example.com.hellorelayout.MyFrameLayout>
</RelativeLayout>
Каждый раз, когда я обновляю один из TextViews, все представления выкладываются (т.е. onLayout() и onGlobalLayout() обоих FrameLayouts запускаются).
Я ожидаю, что этого не произойдет, потому что FrameLayouts имеют фиксированную ширину и высоту.
Так, что происходит? Как я могу предотвратить вызов onLayout () в представлениях? Кстати, если я использую match_parent в TextViews, это работает, но это невозможно, поскольку это упрощение сценария, в котором я не имею никакого контроля над TextView.