Android 带有片段的导航视图。工具栏

Android 带有片段的导航视图。工具栏,android,tabs,navigationview,Android,Tabs,Navigationview,因此,我有一个导航视图的活动。通过点击它的项目,我改变了活动中的片段。所有片段都有相同的工具栏。但其中一个有这个工具栏和表格。我想知道在这样的活动中声明工具栏的更好方法是什么 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/toolbar" /> <F

因此,我有一个导航视图的活动。通过点击它的项目,我改变了活动中的片段。所有片段都有相同的工具栏。但其中一个有这个工具栏和表格。我想知道在这样的活动中声明工具栏的更好方法是什么

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

或者在每个片段中声明它

第一种方法的缺点是默认的工具栏阴影。当我在片段中添加选项卡时,阴影看起来像

当我尝试两种解决方案时。我所有的工具栏都带有背面图标,而不是抽屉动画徽标


谢谢。

您可以使用设计支持库中的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>

我也有同样的问题。我就是这样解决的:

  • 按照建议将工具栏移动到片段上(这样就不会有阴影将两者分开)。这也为在布局中实现(不同)工具栏提供了更灵活的方式
  • 将工具栏的导航图标替换为自定义图标,如下所示:

    toolbar.setNavigationIcon(R.drawable.ic_action_menu);
    
    @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);
        }
    }
    
(我使用了创建具有首选颜色的图标)

  • 现在使用新菜单(主页)图标打开NavigationView。您可以通过main活动(带有NavigationView的活动)来实现这一点。在该活动中创建打开抽屉的公共方法:

    public void openDrawer(){
        mDrawerLayout.openDrawer(Gravity.LEFT);
    }
    
  • 现在在片段中的OnOptions ItemSelected中调用此方法,如下所示:

    toolbar.setNavigationIcon(R.drawable.ic_action_menu);
    
    @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)放在片段中,并且仍然能够控制导航视图的方法。

因此我需要执行类似于
mPager.setAdapter(mAdapter)的操作;TabLayout tabs=((MyActivity)getActivity()).getTabLayout();tabs.setVisibility(View.VISIBLE);选项卡。使用ViewPager(mPager)进行设置看起来不好。