2.1 Создание фрагментов и подготовка макетов

Для выполнения второго задания создаем новый проект и настраиваем MainActivity, чтобы сделать status bar и navigation bar просвечивающимися (translucent). Мы хотим, чтобы макет был как бы в режиме full screen - покрывал область status bar и navigation bar.

MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Window w = getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }
}

Далее, мы готовим три класса фрагментов и три макета для каждого фрагмента. Так как во втором задании содержимое фрагментов не так важно, то фрагменты не будут иметь никакой бизнес-логики, а макеты будут содержать одно изображение.

Далее, настраиваем макет activity_main.xml. Так как мы хотим, чтобы BottomNavigationView находится поверх ViewPager2, то мы выбираем в качестве основного контейнера FrameLayout, куда помещаем ViewPager2 и BottomNavigationView

activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@android:color/transparent"
        android:layout_marginBottom="42dp"/>
</FrameLayout>

Обратите внимание, что мы сделали отступ в 42dp снизу от BottomNavigationView. Это сделано, чтобы избежать наложения на navigation bar. При таком отступе, BottomNavigationView окажется сверху от панели навигации.

Виджет BottomNavigationView мы настроим позже, а пока вернемся в MainActivity, чтобы настроить работу ViewPager2.

Проверим листание фрагментов с помощью ViewPager2.

Last updated