我从AcrionBar切换到工具栏,我注意到我需要在布局XML中添加Toolbar元素。我的问题是,将工具栏元素放在一个单独的XML布局中然后将其包含在我的所有活动布局中是个好主意,以便我有自定义工具栏的集中统一方式吗?还有java部分在我的活动的超级类(BaseActivity.java)中设置工具栏,所以我不必在每个活动中都这样做吗?
我想到了这一点,但我想知道这样做是否有任何缺点,因为我没有使用工具栏的经验。
任何想法都将受到赞赏
答案 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/
中实施工具栏