Если удалить на app:layout_scrollFlags
значение scroll
на панели инструментов, то содержимое переместится наверх.
Содержимое смещается вверх, поскольку высота LinearLayout
, которая переноситсяTextView
меняет высоту.В результате, android:gravity="center"
, указанное в LinearLayout
, вычисляет другой вертикальный центр.
Следующий макет представляет собой упрощенный вид вашего макета в демонстрационных целях.
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_light"
android:gravity="center"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:id="@+id/titleView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/error_view_internet_connection_title"
android:textSize="16sp" />
</LinearLayout>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
app:title="Toolbar" />
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
Здесь представлен вид инспектора макета для этого макета, показывающий высоту LinearLayout
с и безустановлен флаг прокрутки.
Без установленного флага прокрутки высота LinearLayout
, охватывающего TextViews
, меньше на высотуToolbar
.Это имеет смысл, поскольку LinearLayout
равно match_parent
, оно должно соответствовать.С установленным флагом прокрутки LinearLayout
может быть выше, поскольку он может прокручиваться и не должен умещаться на экране.На самом деле, он такой же высокий, как экран, но смещен под панелью инструментов.
Вы можете быстро проверить, так ли это, но заменив android:gravity="center"
верхним полем.
Я удаляю флаг с помощью func, и после этого в пользовательском интерфейсе трясется
Я думаю, что я видел это поведение раньше, но я не помню причину этого.Поскольку CoordinatorLayout
настолько динамичен, это может быть своего рода колебание в макете из-за некоторой неоднозначности макета.Это, однако, не более, чем догадка.Если вы немного очистите свой макет и подумаете, почему вы манипулируете флагом прокрутки (есть ли другой способ?), Вы сможете решить проблему.
Если не считать этого, небольшой исполняемый проект, демонстрирующийпроблема с дрожанием может быть полезной для публикации.