5

Ich habe Aktivität mit NavigationDrawer und AppBarLayout mit Toolbar. Leider, wenn ich TabLayout im Kindfragment verwende, sehe ich Schatten zwischen der Symbolleiste und TabLayout. Darf Schatten nur unterhalb von TabLayout angezeigt werden? Ich möchte TabLayout nicht in meine Aktivität verschieben, da ich es nur in einem Fragment verwende.Verwendung von Android AppBarLayout, Toolbar und TabLayout mit Fragmenten

kann ich einige Lösungen für dieses Problem finden Sie unter:

  • deaktivieren Erhebung auf Toolbar & TabLaout (mag es nicht)
  • remove toolbar aus Aktivität und verschieben Sie sie in Fragment

Hast du irgendwelche Ideen, wie man es in meinem Szenario richtig benutzt?

Wrong drop shadow

+0

Entfernen Erhebung und Hintergrund aus der Toolbar und wenden sie stattdessen AppBarLayout. –

+0

@EugenPechanec Ich bin nicht sicher, ob es helfen wird, weil TabLayout nicht in AppBarLayout ist ... – radzio

+0

Setzen Sie es dann ein. https://github.com/chrisbanes/cheesquare/blob/master/app/src/main/res/layout/include_list_viewpager.xml –

Antwort

2

hatte ich das gleiche Problem, und es ist einfach zu beheben. Entfernen Sie einfach das AppBarLayout aus der Aktivität und fügen Sie es in das Fragment ein. Dadurch behalten Sie die Toolbar in der Aktivität und die TabLayout mit dem Schatten im Fragment.

Aktivität:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:orientation="vertical" 
    tools:context=".MainActivity"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 


    <FrameLayout 
     android:id="@+id/main_activity_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </FrameLayout> 


</LinearLayout> 

Fragment:

<?xml version="1.0" encoding="utf-8"?> 
<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:orientation="vertical" 
    android:fitsSystemWindows="true" 
    tools:context=".MainActivity"> 


    <android.support.design.widget.AppBarLayout 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

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

    </android.support.design.widget.AppBarLayout> 

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

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


</LinearLayout> 

Hoffnung, das hilft!

+0

In der Frage wurde festgestellt, dass "Höhe auf Toolbar & TabLayout deaktivieren" nicht erwünscht ist. Das Entfernen der TabLayout ist im Prinzip das gleiche wie das Einstellen der Höhe von TabLayout auf 0, denke ich. – xxtesaxx

0

stolperte über die gleiche Frage. In meiner Aktivität verwende ich AppBarLayout mit einer Symbolleiste und in einem meiner Fragmente verwende ich auch ein AppBarLayout mit einem TabLayout. Bei allen anderen Fragmenten, die ich auf dieser Aktivität zeige, tue ich das nicht. Daher möchte ich nur die Höhe des Fragments mit dem TabLayout auf 0 setzen.

I Endet die Höhe jedes Mal manuell einrichten I-Fragmente wechseln:

private void showAccount(){ 
    AccountFragment accountFragment = AccountFragment.newInstance(mUser); 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction() 
      .replace(R.id.content_main, accountFragment) 
      .commit(); 
    elevateActionBar(false); 
} 

private void showSettings(){ 
    SettingsFragment settingsFragment = new SettingsFragment(); 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction() 
      .replace(R.id.content_main, settingsFragment) 
      .commit(); 
    elevateActionBar(true); 
} 

private void elevateActionBar(boolean elevate){ 
    //Elevate ActionBar (make ActionBar have a shadow) 
    AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.app_bar_layout_main); 
    if(elevate) { 
     appBarLayout.setElevation(4); 
    }else{ 
     appBarLayout.setElevation(0); 
    } 
}