集中 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/
我正在从 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/