я в настоящее время возникли проблемы с FrameLayout
в CoordinatorLayout
из Android библиотеки дизайн-поддержки, тогда как я следовал инструкциям из этой post при создании вкладок.Android SupportLib - FrameLayout в CoordinatorLayout с AppBarLayout потребляя весь экран высоты
В основном большинство вещей работают, как и ожидалось, контейнер-фрагменты завышены в FrameLayout
и ихние Таб-фрагменты correclty добавлены в ViewPager
в виде вкладок (это нужно таким образом, потому что у меня есть многочисленные фрагменты, которые должны повторно использовать макет) ,
Проблема, которую я борюсь с, что FrameLayout
(и в результате также вкладка-фрагменты) поглощает весь экран-высоту, так что перекрывает Toolbar
и TabLayout
. Для того, чтобы визуализировать проблему, я создал следующий образ:
Base-Layout с CoordinatorLayout
, Toolbar
и TabLayout
:
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<include layout="@layout/toolbar" />
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>
Раздельные макет, используемый фрагментами завышены в container
:
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_height="match_parent"
android:layout_width="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
Все фрагменты завышены моим BaseFragment
-класса (на другой пост на SO вызова inflater.inflate(getLayoutRes(), null);
был вопрос вызывает ту же проблему)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(getLayoutRes(), container, false);
}
Если я заменю CoordinatorLayout
с нормальным LinearLayout
в FrameLayout
начинается ниже AppBarLayout
как и ожидалось, но для documentationAppBarLayout
для большинства его функций должен быть прямым дочерним элементом CoordinatorLayout
.
Я мог бы просто добавить marginTop
в FrameLayout
, но я хотел бы знать, есть ли подходящее решение для этого. Спасибо заранее за любые подсказки!
Это решило ту же проблему, что и я, спасибо, но я понятия не имею, почему. Что делает 'appbar_scrolling_view_behavior' точно ...? – Micro
@MicroR - Я бы предложил прочитать Javadoc из [AppBarLayout.ScrollingViewBehavior [(http://developer.android.com/reference/android/support/design/widget/AppBarLayout.ScrollingViewBehavior.html) или посмотреть [источник код] (https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/design/src/android/support/design/widget/AppBarLayout.java#1128) - он добавляет требуемый padding, чтобы не перекрывать «AppBarLayout», а также разрешать 'AppBarLayout' отвечать на прокрутку, если накладывать прокручиваемое представление (например,' NestedScrollView' или 'RecyclerView') – ianhanniballake
@ianhanniballake Я использовал предложение ur, но проблема заключается в том, что я получаю какое-то дополнительное пространство между моим tablayout и framelayout. Я применил цвет bk для анализа причины, но в пользовательском интерфейсе отсутствует фоновый цвет. – Erum