5

Mam aktywność z NavigationDrawer i AppBarLayout z paskiem narzędzi. Niestety, gdy używam TabLayout w części potomnej, widzę cień pomiędzy paskiem narzędzi a TabLayout. Czy możliwe jest wyświetlanie cienia poniżej TabLayout? Nie chcę przenosić TabLayout do mojej aktywności, ponieważ używam go tylko w jednym fragmencie.Jak używać aplikacji Android AppBarLayout, paska narzędzi i TabLayout z fragmentami

Widzę kilka rozwiązań tego problemu:

  • wyłączyć elewację na pasku narzędzi & TabLaout (nie podoba) Pasek
  • Usuń z działalności i przenieść go do fragmentu

Czy masz jakieś pomysły, jak prawidłowo go używać w moim scenariuszu?

Wrong drop shadow

+0

Usuń elewację i tła z paska narzędzi i stosować go do AppBarLayout zamiast. –

+0

@EugenPechanec Nie jestem pewien, czy to pomoże, ponieważ TabLayout nie jest w AppBarLayout ... – radzio

+0

Wstaw to. https://github.com/chrisbanes/cheesesquare/blob/master/app/src/main/res/layout/include_list_viewpager.xml –

Odpowiedz

2

miałem ten sam problem i to jest łatwe do naprawienia. Wystarczy usunąć AppBarLayout z działania i umieścić go w fragmencie. Dzięki temu utrzymujesz pasek narzędzi w działaniu, a TabLayout z cieniem w tym fragmencie.

aktywny:

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

nadzieję, że pomoże!

+0

W pytaniu stwierdzono, że "wyłączenie podniesienia na pasku narzędzi i TabLayout" nie jest pożądane. Usunięcie TabLayout jest zasadniczo takie samo jak ustawienie elewacji TabLayout na 0 Myślę. – xxtesaxx

0

Natknąłem się na to samo pytanie. W mojej działalności używam AppBarLayout z paskiem narzędzi i w jednym z moich Fragmentów, używam również AppBarLayout z TabLayout. Jednak we wszystkich innych Fragmentach, które wyświetlam na temat tej Aktywności, nie mam. Dlatego chcę, aby elewacja była równa 0 w Fragmentie z TabLayout.

I endet się ustawienie elewacji Ręczne każdym razem przełączać fragmenty:

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); 
    } 
} 
Powiązane problemy