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

时间:2015-01-11 20:08:36

标签: android android-actionbar toolbar material-design

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

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

任何想法都将受到赞赏

2 个答案:

答案 0 :(得分:0)

我试图实现我在问题中建议的内容,结果发现它不可能像我建议的那样集中它,因为晚餐类没有访问子类中的View引用。虽然我们可以使用其他技巧来完成这项工作,但我注意到它并不值得付出努力,因为工具栏汽车被设置为活动的ActionBar或SupportActionBar变量,我们需要做的就是添加工具栏所有活动布局

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

在我们的活动中。在此之后,我们可以使用与ActionBar一样的代码(除了工具栏中不可用的某些功能之外)

答案 1 :(得分:0)

  

我试图实现我在问题中建议的内容,事实证明   它不可能像我建议的那样集中它,因为它   supper类无权访问子级中的View引用   类。

事实并非如此。您可以在基本活动方法中扩展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/

中实施工具栏