集中 Android 工具栏是个好主意吗?

Is centralizing Android Toolbar a good idea?

我正在从 AcrionBar 切换到工具栏,我注意到我需要在我的布局中添加工具栏元素 XMLs。我的问题是,将工具栏元素放在单独的 XML 布局中,然后将其包含在我所有的 activity 布局中,这样我就可以集中统一地自定义工具栏,这是个好主意吗?在我的活动 (BaseActivity.java) 的超级 class 中还有设置工具栏的 java 部分,所以我不必在每个 activity 中都这样做?

我想到了这个,但我想知道这样做是否有任何缺点,因为我没有使用工具栏的经验。

任何想法将不胜感激

我尝试实现我在问题中提出的建议,但事实证明无法按照我的建议将其集中,因为晚餐 class 无法访问子 class 中的视图引用=21=]。尽管我们可以使用其他技巧来完成这项工作,但我注意到它不值得付出努力,因为工具栏汽车被设置为 activity 的 ActionBar 或 SupportActionBar 变量,我们需要做的就是添加所有 activity 布局中的工具栏

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#000000"
        android:minHeight="?attr/actionBarSize">
</android.support.v7.widget.Toolbar>

并使用类似这样的东西

mToolbar = (Toolbar) findViewById(R.id.toolbar);
if (mToolbar !=null){
    setSupportActionBar(mToolbar);
}

在我们的 activity 中。在此之后,我们可以让我们的代码按原样与 ActionBar 一起工作(除了一些在工具栏中不可用的功能,如选项卡)

I tried to implement what I suggested in the question and it turns out that its not possible to centralize it as I suggested because the supper class doesn't have access to the View references in the child class.

这不是真的。您可以在基础 activity 方法中扩展 setContentView() 并将任何视图注入子活动。

@Override
public void setContentView(int layoutResID) 
{
    DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.activity_base, null);
    FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content);
    getLayoutInflater().inflate(layoutResID, activityContainer, true);
    super.setContentView(fullView);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (useToolbar()) 
    {
        setSupportActionBar(toolbar);
        setTitle("Activity Title");
    } 
    else 
    {
        toolbar.setVisibility(View.GONE);
    }
}

您可以查看本教程,了解如何在所有活动中实施工具栏 http://mateoj.com/2015/06/21/adding-toolbar-and-navigation-drawer-all-activities-android/