在同一布局文件中包含标签和viewpager的逻辑?

时间:2018-11-17 16:22:39

标签: android android-viewpager android-tablayout

开始学习Android,我设法用TabLayout制作了ViewPager。我注意到,TabLayout和ViewPager布局都是同一XML文件中LinearLayout的子元素,如下所示:

    <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,这基本上会使该LinearLayout剩余空间中的ViewPager内容膨胀?

2 个答案:

答案 0 :(得分:1)

任何布局文件中的外部布局都是父级,并为所有子级设置空间规则。您可以嵌套布局或包含所需的任意数量的模板或自定义视图。您必须将TabLayout和ViewPager视为更大布局中的2个视图。他们占据了您将允许他们拥有的空间,但决不能超过父母的限制

更多说明:TabLayout是一个小部件,它使您可以将选项卡粘贴在应用程序的工具栏下方,而Viewpager是一个小部件,使您可以具有可滑动查看的视图。除非需要将选项卡和可滑动查看的视图组合在一起,否则不必将它们包括在一起。从技术上讲,您所设置的ViewPages将占据整个屏幕,但是TabLayout出现在顶部,因此看来分页器从选项卡结束处开始。

答案 1 :(得分:0)

ViewPager应该填满TabLayoutwrap_content留下的空间:

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

带有ViewPager的{​​{1}}很可能只会导致版面的子项重叠。