2016-05-03 6 views
0

Ich bin dabei, die Aktivitäten im Home-Bereich so zu ändern, dass Tabs eingeschlossen werden. Ich benutze https://github.com/saulmm/CoordinatorExamples als Quelle. Aus unbekannten Gründen sehe ich die Registerkarten in meinem AppBarLayout nicht. Ich kann den Fragment Inhalt sehen, aber Registerkartenüberschriften werden überhaupt nicht angezeigt. Ich verwende appcompat-v7: 23.3.0.Android zeigt keine Tabs an

Verkürzte Layout:

<android.support.design.widget.CoordinatorLayout 
    <android.support.design.widget.AppBarLayout 
    <android.support.design.widget.CollapsingToolbarLayout 
     <ImageView .. 
     <android.support.v7.widget.Toolbar .. 
    </android.support.design.widget.CollapsingToolbarLayout> 
    <android.support.design.widget.TabLayout 
     android:id="@+id/main.tabs" 
     android:layout_width="fill_parent" 
     android:layout_height="?attr/actionBarSize" 
     app:tabSelectedTextColor="?android:attr/textColorPrimaryInverse" 
     app:tabIndicatorColor="?android:attr/textColorPrimaryInverse" 
     app:tabIndicatorHeight="4dp" /> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
    android:id="@+id/dashboard.viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    /> 

Aktivität:

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

    CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.main_collapsing); 
    collapsingToolbarLayout.setTitle(getString(R.string.app_name)); 

    ViewPager viewPager = (ViewPager) findViewById(R.id.dashboard_viewpager); 
    viewPager.setAdapter(new TabsAdapter(getSupportFragmentManager())); 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.main_tabs); 
    tabLayout.setupWithViewPager(viewPager); 
} 

class TabsAdapter extends FragmentPagerAdapter { 
    public TabsAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    public int getCount() { 
     return 1; 
    } 

    public Fragment getItem(int i) { 
     switch(i) { 
      case 0: return DashboardHomeFragment.newInstance(); 
     } 
     return null; 
    } 

    public CharSequence getPageTitle(int position) { 
     return "Home"; 
    } 
} 

Fragment:

public class DashboardHomeFragment extends Fragment implements View.OnClickListener { 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_dashboard_home, container, false); 
} 

public void onActivityCreated(@Nullable Bundle state) { 
    log.debug("onActivityCreated()"); 
    super.onActivityCreated(state); 
} 

und das Layout:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Hry" 
    android:textAppearance="@style/TextAppearance.Header" 
    android:paddingRight="8dp" 
    android:paddingLeft="8dp" 
    style="@style/TextComponent.ItemRow"/> 

<TextView 
    android:id="@+id/main.button.puzzle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Najdi výsledek" 
    android:textAppearance="@style/TextAppearance.Item" 
    android:drawableRight="@drawable/ic_arrow_forward_24dp" 
    style="@style/TextComponent.ItemRow.Selectable"/> 

Es gibt ein zweites Problem, aber ich werde es in einer separaten Frage zu dieser Frage veröffentlichen.

Update:

Es wurde verursacht durch CoordinatorLayout Fehlkonfiguration. Ich änderte:

android:layout_height="150dp" 

zu

android:layout_height="wrap_content" 

und die Laschen erschien plötzlich.

+0

Haben Sie den 'android.support.v7.widget.Toolbar' aus dem verkürzten XML hier entfernen? –

+0

Ich habe den angeforderten Teil hinzugefügt .. –

+0

Müssen Sie ein CoordinatorLayout verwenden? Sie brauchen wirklich nur eine Toolbar und ein TabLayout, um Tabs zu erhalten. Versuchen Sie zu sehen, ob [dieser Leitfaden] (https://guides.codepath.com/android/google-play-style-tabs-using-tablayout) hilft. –

Antwort

2

Gemäß den Richtlinien von Android und dem Material Design ist es richtig, den coordinatorLayout zu verwenden.

Die appBarLayout sollte maximal 256dp sein und innerhalb finden wir die Symbolleiste und die Ansichten, die Sie benötigen.

Wenn die Ansichten kollabiert werden sollen, fügen Sie sie in collapsingToolbarLayout ein.

Wenn Sie möchten, dass die Symbolleiste erweiterbar in die collapsingToolbarLayout eingefügt wird.

Die TabLayout wird oft in appBarLayout, aber aus kollabierendenToolbarLayout eingefügt.

Die Summe der Ansichten Höhe ist gleich appBarLayout Höhe (oder verwenden Sie wrap_content für appBarLayout).

Dies ist ein Beispiel der erweiterbaren Symbolleiste mit tabLayout, in diesem Fall appBarLayout hat eine feste Höhe, aber Sie können wrap_content verwenden.

<android.support.design.widget.AppBarLayout 
     android:id="@+id/app_bar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="256dp" 
     android:fitsSystemWindows="true" 
     android:theme="@style/AppTheme.AppBarOverlay"> 


     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="202dp" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:contentScrim="@color/your_color" 
      android:fitsSystemWindows="true"> 

      <--Your views--> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:gravity="top" 
       app:titleMarginTop="13dp" 
       android:minHeight="?attr/actionBarSize" 
       app:popupTheme="@style/AppTheme.PopupOverlay" 
       app:layout_collapseMode="pin" 
      /> 
     </android.support.design.widget.CollapsingToolbarLayout> 

     <android.support.design.widget.TabLayout 
       android:id="@+id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:layout_gravity="bottom" 
       android:background="@color/your_color" 
       app:tabSelectedTextColor="@color/your_color" 
       app:tabTextColor="@color/your_color" 
       app:tabIndicatorColor="@color/your_color" 
       app:tabMode="fixed" 
       app:tabGravity="fill" 
      /> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     /> 
</android.support.design.widget.CoordinatorLayout> 
+0

Danke, Ihr Code funktioniert auch. Und es gibt neue Attribute, die ich nicht kannte, also habe ich wieder etwas gelernt :-) –

+0

Gern geschehen. Dieser neue Code löst auch das andere Problem? –

+0

Ich habe jetzt ein Design-Problem. Es gibt ein ImageView in CollapsingToolbarLayout, das während des Scrollens ausgeblendet wird. Die Tableiste sieht nicht gut aus. Ich muss einen guten Hintergrund finden. Und wahrscheinlich weg scrollen, um nur die Registerkarten anzuzeigen. Es ist eine Menge Veränderung und versuchen Sie, wie ich Koordinator Konfiguration nicht verstehe. –