Java 我可以为每个片段单独设置工具栏吗。如何处理导航抽屉

Java 我可以为每个片段单独设置工具栏吗。如何处理导航抽屉,java,android,android-fragments,android-support-library,android-toolbar,Java,Android,Android Fragments,Android Support Library,Android Toolbar,在我的应用程序中,某些页面在工具栏中具有自定义视图。有些片段具有透明工具栏,有些片段具有坐标布局滚动 所以我决定对每个片段使用单独的工具栏,我想知道这是否是一个好的实践 如果有人已经这样做了,请共享代码或示例。您可以在片段中使用自定义工具栏。您必须为每个片段分别实现它们。首先,在片段布局中声明工具栏: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to

在我的应用程序中,某些页面在工具栏中具有自定义视图。有些片段具有透明工具栏,有些片段具有坐标布局滚动

所以我决定对每个片段使用单独的工具栏,我想知道这是否是一个好的实践


如果有人已经这样做了,请共享代码或示例。

您可以在片段中使用自定义工具栏。您必须为每个片段分别实现它们。首先,在片段布局中声明工具栏:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/activity_main"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white"
            >
<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimaryDark"
    android:gravity="start"
    android:minHeight="?attr/actionBarSize"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    >

    <RelativeLayout
       // your custom toolbar layout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </RelativeLayout>


</android.support.v7.widget.Toolbar>
是的,你可以实现点击监听器和你想用工具栏做的任何事情。有关更多信息,请查看第二个答案:

如果导航抽屉是单个的,那么为什么要在每个片段中都有工具栏?解释没有一些内部详细信息页面/片段是非抽屉活动的。我认为您可以按照传统方式使用单个工具栏多个片段,您可以从每个片段访问工具栏来操作它。对于非抽屉活动,请使用新活动。这只是一个建议,等待其他答案。是的,您可以为每个片段使用单独的工具栏。这不是一个坏习惯。如果这是您的要求,您可以实现它。@apk您想在每个片段中实现单独的工具栏,还是获取活动的工具栏并在每个片段中更改它?这两个是不同的。是否有任何gaurantee在onCreateView中“getActivity”不会返回null???getActivity在onActivityCreated回调中必须不为null,该回调由框架按onCreateView->onViewCreated->的顺序调用onActivityCreated@FarhangetActivity不应为null。是的,它可以在您创建的任何其他方法中,但onCreate方法的getActivity不应为null。或者,如果您想确保它不应为null,您可以将上下文强制转换为在onAttachContext ctx方法中调用片段的活动。@Umair已建议为edit:1。您必须使用setBackgroundColor,setBackground不采用int=颜色,例如Color.RED,但仅采用可绘制的颜色。2.您必须返回视图,因为@Override要求函数返回视图。因此,基本上:目前的代码不会生成。我将再次建议编辑,请测试/接受它或提供将生成的替代代码。@nep请看一看问题OP不希望设置颜色,而是希望为片段设置一个单独的工具栏。这两件事是不同的:最后一件事你是对的,我们应该在onCreateView方法中返回一个视图。@Umair我知道,这就是为什么我很困惑为什么你首先添加了它和home按钮位,但因为它已经存在了,我不想通过删除来完全改变答案,毕竟编辑不是为了这个;,尽管这与问题无关。但是,如果您想将背景色设置为color=int,那么setBackground并不是正确的函数,正如您在第一次拒绝的两次编辑中所更正的那样。因此,请删除不相关的代码或接受我的编辑,以提供正确的函数,使其可编译。
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle 
    savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, container, false);
        Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);

        //set toolbar appearance
        toolbar.setBackground(your background);

        //for create home button
        AppCompatActivity activity = (AppCompatActivity) getActivity();
        activity.setSupportActionBar(toolbar);
        activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

  return view;
}