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>

或在每个片段中声明它。

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

在此处输入图像描述

当我尝试 2 解决方案时。我所有的工具栏都带有后退图标而不是抽屉动画徽标。

谢谢。

4

2 回答 2

4

我有同样的问题。这就是我解决它的方法:

  • 像您建议的那样将工具栏移动到片段(这样您就不会有阴影将两者分开)。这也允许以更灵活的方式在您的布局中实现(不同的)工具栏。
  • 用这样的自定义图标替换工具栏的导航图标:

    toolbar.setNavigationIcon(R.drawable.ic_action_menu);
    

(我使用Android Asset Studio轻松创建了具有首选颜色的图标)

  • 现在使用新的菜单(主页)图标打开 NavigationView。您可以通过 MainActivity(带有 NavigationView 的那个)来执行此操作。在该 Activity 中创建一个打开抽屉的公共方法:

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

而已。当然缺点是必须在每个 Fragment 中实现 Toolbar。但是,这是(据我所知)使您能够在片段中拥有工具栏(+TabLayout)并且仍然能够控制您的 NavigationView 的唯一方法。

于 2015-10-09T23:46:32.337 回答
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>

然后您可以更改标签布局的可见性。

有关设计布局库的更多信息:链接

于 2015-07-23T10:32:16.777 回答