Android Studio中如何自定义ActionBar?无需新建Toolbar仅添加Logo与按钮
在Android Studio中自定义现有ActionBar(无需新建Toolbar)
没问题,我来一步步帮你搞定在现有ActionBar里添加Logo和按钮的需求,不用额外创建Toolbar~
一、给ActionBar添加Logo
你有两种方式可以设置Logo,选适合你的就行:
方式1:通过主题配置(静态设置)
- 先把你的Logo图片放到
res/drawable目录下(记得准备不同分辨率的版本适配不同设备,比如mdpi、hdpi等)。 - 打开
res/values/styles.xml,找到你的应用主题(比如Theme.YourAppName),添加以下属性:
<!-- 如果你用的是AppCompat主题,用不带android:前缀的属性 --> <item name="logo">@drawable/your_logo_name</item> <item name="displayOptions">useLogo|showHome</item> <!-- 如果是原生Android主题,用带android:前缀的 --> <!-- <item name="android:logo">@drawable/your_logo_name</item> --> <!-- <item name="android:displayOptions">useLogo|showHome</item> -->
这样应用启动后,ActionBar就会自动显示你的Logo啦。
方式2:代码动态设置
如果你需要在运行时动态切换Logo,就在Activity的onCreate方法里添加这段代码:
// 注意:如果用AndroidX,导入的是androidx.appcompat.app.ActionBar ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { // 设置Logo资源 actionBar.setLogo(R.drawable.your_logo_name); // 启用Logo显示 actionBar.setDisplayUseLogoEnabled(true); // 显示Home区域(Logo会放在这里) actionBar.setDisplayShowHomeEnabled(true); }
二、给ActionBar添加自定义按钮
要添加按钮,其实就是给ActionBar添加菜单选项,步骤如下:
- 创建菜单布局文件:在
res/menu目录下新建一个XML文件(比如menu_actionbar_buttons.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"> <!-- 一直显示在ActionBar上的按钮 --> <item android:id="@+id/action_search" android:icon="@drawable/ic_search" android:title="搜索" app:showAsAction="always"/> <!-- 隐藏在更多菜单里的按钮 --> <item android:id="@+id/action_settings" android:title="设置" app:showAsAction="never"/> </menu>
app:showAsAction="always":按钮一直显示在ActionBar上;app:showAsAction="ifRoom":ActionBar有空间时才显示,否则放到更多菜单里;app:showAsAction="never":永远放到更多菜单里。
- 在Activity中加载菜单并处理点击事件:在你的Activity里重写两个方法:
@Override public boolean onCreateOptionsMenu(Menu menu) { // 加载刚才创建的菜单布局 getMenuInflater().inflate(R.menu.menu_actionbar_buttons, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // 处理按钮点击事件 int id = item.getItemId(); if (id == R.id.action_search) { // 这里写搜索按钮的逻辑 Toast.makeText(this, "搜索按钮被点击啦", Toast.LENGTH_SHORT).show(); return true; } else if (id == R.id.action_settings) { // 这里写设置按钮的逻辑 Toast.makeText(this, "打开设置页面", Toast.LENGTH_SHORT).show(); return true; } return super.onOptionsItemSelected(item); }
三、注意事项
- 确保你的Activity使用的是带ActionBar的主题(比如
Theme.AppCompat.Light.DarkActionBar),如果用了NoActionBar主题,getSupportActionBar()会返回null,就没法操作现有ActionBar了; - 如果项目用的是AndroidX,记得导入
androidx.appcompat.app.ActionBar,而不是旧的android.app.ActionBar; - 按钮的图标同样要准备不同分辨率的版本,避免在高分辨率设备上模糊。
内容的提问来源于stack exchange,提问作者Awais Ahmad
相关产品推荐
相关产品推荐

