2013-02-07 12 views
5

Celem jest wyświetlenie dwóch fragmentów (Frag A, Frag B) na ekranie w innym układzie, w zależności od orientacji ekranu (pionowej lub poziomej).Android: w jaki sposób mieszasz układ ViewPager z układem innym niż ViewPager dla różnych orientacji urządzenia?

Gdy urządzenie jest w trybie portretowym, wyświetlany jest tylko jeden fragment Frag A i Frag B za pomocą przesuwania, aby przełączać się między interfejsami. ViewPager idealnie do tego działa.

Gdy urządzenie znajduje się w trybie poziomym, fragment A jest wyświetlany po lewej stronie ekranu, a fragment B jest wyświetlany po prawej stronie. Prosty LinearLayout doskonale się do tego nadaje.

Problem pojawia się, gdy próbujesz uzyskać oba działające w tej samej aplikacji. Wygląda na to, że klasa ViewPager musi być powiązana z kodem źródłowym Java (w metodzie onCreate). Oznacza to, że element UI jest zdefiniowany zarówno w kodzie XML, jak iw kodzie źródłowym ... co wydaje się problemem, gdy urządzenie znajduje się w trybie poziomym i nie powinno być obiektu ViewPager, ale w kodzie źródłowym jest mowa o nim. Czy podchodzę do tego prawidłowo? Jeśli jeden układ wykorzystuje ViewPager, czy każdy inny układ potrzebuje ViewPagera?

układ/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> 

layout-land/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> 

Od 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); 

} 

Odpowiedz

1

ViewPager służy do wystąpienia Zobacz obiektów w czasie wykonywania , więc trzeba to zdefiniować w kodzie.

To, co próbowałem zrobić, jest bardzo podobne do różnych układów tabletów/słuchawek opisanych w Fragments Guide, gdzie zaleca się używanie oddzielnych działań.

(Jeśli ktoś wie, w jaki sposób poradzić sobie z przesuwaniem w całości w formacie XML, byłoby to o wiele lepszym rozwiązaniem)