Android, как расположить TabLayout в нижней части экрана (для библиотеки дизайна материалов Google TabLayout) - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь использовать TabLayout, соединенный с ViewPager, чтобы создать три фрагмента с возможностью пролистывания.Однако я столкнулся с проблемой: Я хочу, чтобы TabLayout находился внизу экрана, но ViewPager заставляет его находиться сверху .

Раньше TabLayout находился в android.support.design.widget библиотека.Однако эта библиотека была изменена с момента появления androidx.Новая библиотека - com.google.android.material.tabs.TabLayout .

Предыдущие (и устаревшие) записи ( example1 , example2 ) предложить простое решение вышеуказанной проблемы, просто создав вертикальную LinearLayout и указав ViewPager и TabLayout как два отдельных элемента этого LinearLayout.

Приведенное выше решение больше не является жизнеспособнымиз-за того, что теперь вы должны указать TabLayout как элемент внутри ViewPager ( ссылка ), например:

<androidx.viewpager.widget.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        >
    </com.google.android.material.tabs.TabLayout>
</androidx.viewpager.widget.ViewPager>

Затем, чтобы«объединить» ViewPager с TabLayout, метод setupWithViewPager(ViewPager vp) должен быть вызван на экземпляре TabLayout:

ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
MainPagerAdapter mpa = new MainPagerAdapter(getSupportFragmentManager(), 3);
viewPager.setAdapter(mpa);

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager);

Теперь, как я могу аккуратно сделать TabLayoutперейти к нижней части ViewPager, из кода XML или программно?

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Я нашел ответ: просто добавьте android:layout_gravity="bottom" к TabLayout в xml.

Так что реализация xml теперь выглядит так:

<androidx.viewpager.widget.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_gravity="bottom"
            >
        </com.google.android.material.tabs.TabLayout>
    </androidx.viewpager.widget.ViewPager>
0 голосов
/ 23 сентября 2019

Согласно вашей ссылке - Чтобы включить TabLayout в ViewPager, добавьте элемент TabLayout внутри элемента ViewPager.

, но это не означает, что вы не можете использовать TabLayout вне ViewPager.так что вы можете использовать любые ответы из предыдущих постов или можете попробовать вот так

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
<androidx.viewpager.widget.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/tab_layout"/>

<com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_height="48dp"/></RelativeLayout>
...