5

Ho attività con NavigationDrawer e AppBarLayout con barra degli strumenti. Sfortunatamente quando sto usando TabLayout nel frammento figlio vedo ombra tra la barra degli strumenti e TabLayout. È possibile visualizzare l'ombra solo sotto TabLayout? Non voglio spostare TabLayout alla mia attività perché la sto usando solo in un frammento.Come utilizzare Android AppBarLayout, barra degli strumenti e TabLayout con frammenti

posso vedere alcune soluzioni per questo problema:

  • elevazione disabilitare la barra degli strumenti sul & TabLaout (Non mi piace!) Barra degli strumenti
  • rimuovere dall'attività e spostarlo nel frammento

Hai qualche idea su come usarla correttamente nel mio scenario?

Wrong drop shadow

+0

Rimuovere elevazione e sfondo dalla barra degli strumenti e applicarlo a AppBarLayout invece. –

+0

@EugenPechanec Non sono sicuro se sarà utile perché TabLayout non è all'interno di AppBarLayout ... – radzio

+0

Inseriscilo in seguito. https://github.com/chrisbanes/cheesesquare/blob/master/app/src/main/res/layout/include_list_viewpager.xml –

risposta

2

Ho avuto lo stesso problema ed è facile da risolvere. Basta rimuovere AppBarLayout dall'attività e inserirla nel frammento. In questo modo mantieni la barra degli strumenti nell'attività e TabLayout con l'ombra nel frammento.

attività:

<?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> 

Frammento:

<?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> 

Speranza che aiuta!

+0

Nella domanda, è stato affermato che "disabilitare l'elevazione su Toolbar & TabLayout" non è desiderato. La rimozione di TabLayout equivale sostanzialmente a impostare l'elevazione di TabLayout su 0, penso. – xxtesaxx

0

Si è imbattuto nella stessa domanda. Nella mia attività, utilizzo AppBarLayout con una barra degli strumenti e in uno dei miei frammenti, utilizzo anche un AppBarLayout con un TabLayout. Tuttavia, su tutti gli altri frammenti che mostro su questa attività, non lo faccio. Pertanto, voglio solo che l'elevazione sia 0 sul frammento con TabLayout.

I Endet fino modificando l'altezza manualmente ogni volta che accendo frammenti:

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); 
    } 
} 
Problemi correlati