Логика наличия вкладок и viewpager в одном файле макета? - PullRequest
0 голосов
/ 17 ноября 2018

Начиная изучать Android, мне удалось сделать TabLayout с ViewPager.Я заметил, что и TabLayout, и макет ViewPager являются потомками LinearLayout в одном и том же XML-файле следующим образом:

    <LinearLayout 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:background="@color/primary_color"
    android:orientation="vertical"
    tools:context="com.example.barebones.barebones.MainActivity">

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        style="@style/CategoryTab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

И основное действие раздувает приложение следующим образом:

public class MainActivity extends AppCompatActivity {

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

            // Find the view pager that will allow the user to swipe between fragments
            ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);

            // Create an adapter that knows which fragment should be shown on each page
            TabsAdapter adapter = new TabsAdapter(this, getSupportFragmentManager());

            // Set the adapter onto the view pager
            viewPager.setAdapter(adapter);

            // Find the tab layout that shows the tabs
            TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

            // Connect the tab layout with the view pager. This will
            //   1. Update the tab layout when the view pager is swiped
            //   2. Update the view pager when a tab is selected
            //   3. Set the tab layout's tab names with the view pager's adapter's titles
            //      by calling onPageTitle()
            tabLayout.setupWithViewPager(viewPager);

        }
    }

Я не могу понять, как они работают вместе?не должны ли они быть отдельными?Или значение:

Вкладки являются дочерними для LinearLayout, и тогда остальное пространство предназначено для этого ViewPager, который в основном раздувает содержимое ViewPager в оставшемся пространстве этого LinearLayout

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

ViewPager должен заполнить пространство, которое TabLayout с wrap_content оставляет:

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android_layout_weight="1.00"/>

a ViewPager с match_parent скорее всего просто приведет к перекрытию дочерних элементов макета.

0 голосов
/ 17 ноября 2018

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

Примечание: TabLayout - это виджет, который позволяет вам иметь вкладки, которые прикрепляются под панелью инструментов в вашем приложении, а Viewpager - это виджет, который позволяет вам иметь пролистывающие виды. Вам не обязательно включать их вместе, если вы не хотите сочетать вкладки и пролистываемые виды. Технически ViewPages, как вы их установили, будут занимать весь экран, но TabLayout появляется сверху, поэтому кажется, что пейджер начинается там, где заканчиваются вкладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...