2015-07-23 2 views
3

Итак, у меня есть активность с навигационным видом. Нажимая на свой элемент, я меняю фрагмент на активность. Все фрагменты имеют одну и ту же панель инструментов. Но у вас есть эта панель инструментов и TabLayout. Я хотел бы знать, что лучше объявить тулбар раз о деятельности как этотНавигация с фрагментом. Панель инструментов

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <include layout="@layout/toolbar" /> 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/toolbar" /> 

</RelativeLayout> 

или объявить его в каждом фрагменте.

Недостатком первого метода является тень панели инструментов по умолчанию. При добавлении вкладки в фрагменте, тень выглядит

enter image description here

Когда я попробовал 2 решения. Вся моя панель инструментов была с обратным символом, а не анимированным логотипом.

Спасибо.

ответ

0

Вы можете использовать AppBarLayout из библиотеки поддержки проектирования, как:

<android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
      ... 
      app:layout_scrollFlags="scroll|enterAlways" /> 

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

, а затем вы можете изменить видимость tablayout.

Для получения дополнительной информации о Desing библиотеки макета: link

+1

Поэтому мне нужно сделать что-то вроде 'mPager.setAdapter (mAdapter); TabLayout tabs = ((MyActivity) getActivity()). GetTabLayout(); tabs.setVisibility (View.VISIBLE); tabs.setupWithViewPager (mPager); ' Посмотрите не очень хорошо. –

4

У меня была точно такая же проблема. Вот как я это решил:

  • Переместите панели инструментов на фрагменты, как вы предлагали (так что у вас не будет тени, разделяющей две). Это позволяет использовать более гибкий способ реализации (разных) панелей инструментов в ваших макетах.
  • Заменить навигации значок на Панели инструментов по обычаю один, как это:

    toolbar.setNavigationIcon(R.drawable.ic_action_menu); 
    

(я использовал Android Asset Studio легко создать иконку с предпочтительным цветом)

  • Теперь откройте NavigationView с новым значком меню (дома). Вы можете сделать это через MainActivity (тот, у которого есть NavigationView). Создание общедоступного метода в том, что деятельность, которая открывает ящик:

    public void openDrawer(){ 
        mDrawerLayout.openDrawer(Gravity.LEFT); 
    } 
    
  • Теперь этот метод вызывается в OnOptionsItemSelected в ваших фрагментов, как это:

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        // handle item selection 
        switch (item.getItemId()) { 
         case android.R.id.home: //Menu icon 
          ((MainActivity)getActivity()).openDrawer(); 
          return true;    
         default: 
          return super.onOptionsItemSelected(item); 
        } 
    } 
    

Вот и все. Конечно, недостатком является то, что вы должны реализовать панель инструментов в каждом фрагменте. Тем не менее, это единственный способ (который я знаю), который позволяет вам иметь панель инструментов (+ TabLayout) во Фрагменте и по-прежнему управлять вашим NavigationView.