根据上下文(片段)更改 AppBar 的图标
Change AppBar's icons depending on the Context (Fragments)
我的 AppBar 在我的 MainActivity 上。我的 MainActivity 有一个类似于片段容器的布局。
我想要完成的是,我希望我的 AppBar 图标根据当前位于顶部的 Fragment 进行更改。
像这样:
switch (item.getItemId()){
case R.id.semanario:
fragmentTransaction.replace(R.id.viewPagerMainContenedor, new FragmentSemanario());
fragmentTransaction.addToBackStack(null).commit();
myToolbar.SETICON(R.drawable.iconExample) (And how to change the xml atributte "app:showAsAction = always)
break;
我考虑过为每个片段制作一个 AppBar,但它应该比这更容易,不是吗?
如果您的 AppBar
与某些 Fragments
不同,您应该将 AppBar
放在 Fragment
中。现在你可能能够用 FragmentTransactions
来改变你的 AppBar
但稍后当你构建 back/up 导航或深度 linking 时它会开始崩溃并且您会希望从一开始就将其放入 Fragment 中。
编辑:当用户点击菜单项时,您知道 Fragment
用户正在导航到什么,因为您自己正在做 FragmentTransaction
。但是,当用户按下后退按钮时,Android 将为您执行 FragmentTransaction
并且判断用户正在导航到什么 Fragment
变得更加困难。您可以遍历 FragmentManager
中的所有 Fragments
并检查哪些 Fragment
可见,但可能同时有多个 Fragments
可见(例如 ViewPager
或平板电脑视图)。当用户通过深层 link 进入您的应用程序时,管理 Fragments
和后台堆栈已经成为 *** 的痛点。
当您的应用增长时,导航会变得越来越复杂。您未来的自己会感谢您将 AppBar
放在 Fragment
而不是 Activity
中,因为您不必担心它与当前显示的 Fragment
保持同步].
在你的 main activity 中添加一个方法,如下所示:
updateToolbar(int title, int drawable){
toolbar.setTitle(title);
toolbar.setIcon(drawable);
}
然后从您的片段中调用此方法:
getActivity().updateToolbar(title,R.drawable.icon);
要更改操作溢出图标:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
<item name="actionOverflowButtonStyle">@style/OverFlow</item>
</style>
<style name="OverFlow"
parent="Widget.AppCompat.ActionButton.Overflow">
<item name="android:src">@drawable/my_overflow_menu</item>
</style>
对于其他自定义图标,您只需通过他们的视图进行更新即可。
希望对你有帮助。
我的 AppBar 在我的 MainActivity 上。我的 MainActivity 有一个类似于片段容器的布局。
我想要完成的是,我希望我的 AppBar 图标根据当前位于顶部的 Fragment 进行更改。
像这样:
switch (item.getItemId()){
case R.id.semanario:
fragmentTransaction.replace(R.id.viewPagerMainContenedor, new FragmentSemanario());
fragmentTransaction.addToBackStack(null).commit();
myToolbar.SETICON(R.drawable.iconExample) (And how to change the xml atributte "app:showAsAction = always)
break;
我考虑过为每个片段制作一个 AppBar,但它应该比这更容易,不是吗?
如果您的 AppBar
与某些 Fragments
不同,您应该将 AppBar
放在 Fragment
中。现在你可能能够用 FragmentTransactions
来改变你的 AppBar
但稍后当你构建 back/up 导航或深度 linking 时它会开始崩溃并且您会希望从一开始就将其放入 Fragment 中。
编辑:当用户点击菜单项时,您知道 Fragment
用户正在导航到什么,因为您自己正在做 FragmentTransaction
。但是,当用户按下后退按钮时,Android 将为您执行 FragmentTransaction
并且判断用户正在导航到什么 Fragment
变得更加困难。您可以遍历 FragmentManager
中的所有 Fragments
并检查哪些 Fragment
可见,但可能同时有多个 Fragments
可见(例如 ViewPager
或平板电脑视图)。当用户通过深层 link 进入您的应用程序时,管理 Fragments
和后台堆栈已经成为 *** 的痛点。
当您的应用增长时,导航会变得越来越复杂。您未来的自己会感谢您将 AppBar
放在 Fragment
而不是 Activity
中,因为您不必担心它与当前显示的 Fragment
保持同步].
在你的 main activity 中添加一个方法,如下所示:
updateToolbar(int title, int drawable){
toolbar.setTitle(title);
toolbar.setIcon(drawable);
}
然后从您的片段中调用此方法:
getActivity().updateToolbar(title,R.drawable.icon);
要更改操作溢出图标:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
<item name="actionOverflowButtonStyle">@style/OverFlow</item>
</style>
<style name="OverFlow"
parent="Widget.AppCompat.ActionButton.Overflow">
<item name="android:src">@drawable/my_overflow_menu</item>
</style>
对于其他自定义图标,您只需通过他们的视图进行更新即可。 希望对你有帮助。