Android:如何将ViewPager布局与非ViewPager布局混合用于不同的设备方向?

时间:2013-02-07 19:13:36

标签: android android-layout

目标是根据屏幕方向(纵向或横向)以不同的布局在屏幕上显示两个片段(片段A,片段B)。

当设备处于纵向模式时,使用滑动在UI之间切换时,一次只能显示Frag A和Frag B中的一个。 ViewPager非常适用于此。

当设备处于横向模式时,屏幕左侧显示Frag A,右侧显示Frag B.一个简单的LinearLayout非常适用于此。

尝试同时在同一个应用程序中工作时会出现问题。似乎必须在Java源代码中引用ViewPager类(在onCreate方法中)。这意味着在XML和源代码中都定义了一个UI元素......当设备处于横向模式并且不应该有ViewPager对象但在源代码中引用一个时,这似乎是一个问题。我接近这个吗?如果一个布局使用ViewPager,那么每个其他布局是否需要ViewPager?

layout / activity_mymain.xml

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MyMainActivity" >

    <!--
    This title strip will display the currently visible page title, as well as the page
    titles for adjacent pages.
    -->

    <android.support.v4.view.PagerTitleStrip
        android:id="@+id/pager_title_strip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="#33b5e5"
        android:paddingBottom="4dp"
        android:paddingTop="4dp"
        android:textColor="#fff" />

</android.support.v4.view.ViewPager>

布局脊/ activity_mymain.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <fragment android:name="com.example.ActionFragment"
              android:id="@+id/action_fragment"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    <fragment android:name="com.example.SummaryFragment"
              android:id="@+id/summary_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>

来自MyMainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_topmain);

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

}

1 个答案:

答案 0 :(得分:1)

ViewPager用于在运行时实例化View对象,因此需要在代码中定义它。

我试图做的与Fragments Guide中描述的不同平板电脑/手机布局非常相似,他们建议使用不同的活动。

(如果有人知道一种完全用XML处理滑动的方法,那将是一个更好的解决方案)