基于Android Studio底部导航Activity,如何修改顶部栏(加图标、改颜色)?
一、修改顶部栏颜色
最简单也最符合Material Design规范的方式是通过主题配置修改:
- 打开
res/values/themes目录下的主题文件(通常是Theme.YourAppName.xml) - 在
<style>标签里找到colorPrimary属性,替换成你想要的颜色代码即可,比如:
<item name="colorPrimary">#FF6200EE</item>
如果需要适配深色主题,就去对应的Theme.YourAppName.Dark.xml文件里修改相同属性。
要是你需要动态切换顶部栏颜色(比如随页面变化),也可以在代码里这么写:
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FF6200EE")));
二、在顶部栏添加跳转图标(右侧操作按钮)
要实现点击图标跳转到非底部导航的Fragment,推荐用Options Menu的方式,步骤很清晰:
- 创建顶部栏菜单文件
在res/menu目录下新建top_app_bar_menu.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_go_custom_fragment" android:icon="@drawable/your_icon_file" <!-- 替换成你的图标文件名 --> android:title="跳转到自定义Fragment" app:showAsAction="always" /> <!-- 让图标始终显示在顶部栏 --> </menu>
- 在MainActivity中加载菜单
重写onCreateOptionsMenu方法,加载刚才创建的菜单:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.top_app_bar_menu, menu); return true; }
- 处理图标点击跳转逻辑
重写onOptionsItemSelected方法,实现跳转:
@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_go_custom_fragment) { // 获取导航控制器实例 NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); // 跳转到目标Fragment,记得先在nav_graph.xml里添加这个Fragment的节点 navController.navigate(R.id.your_custom_fragment_id); return true; } return super.onOptionsItemSelected(item); }
- 在导航图中添加目标Fragment
打开res/navigation/nav_graph.xml,添加你的自定义Fragment节点:
<fragment android:id="@+id/your_custom_fragment_id" android:name="com.your.package.YourCustomFragment" android:label="自定义Fragment" />
额外小技巧:把图标放在顶部栏左侧
如果想让图标出现在标题左侧(比如作为应用logo),可以在MainActivity的onCreate方法里加这段代码:
ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayShowHomeEnabled(true); actionBar.setIcon(R.drawable.your_icon_file); // 不需要默认返回箭头的话可以关闭它 actionBar.setDisplayHomeAsUpEnabled(false); }
不过操作类图标还是更推荐放在右侧,符合用户的操作习惯哦。
内容的提问来源于stack exchange,提问作者Kharin1986




