Android开发:如何修改Toolbar菜单中搜索图标的颜色
修改Toolbar搜索图标颜色的实用方法
我有一个带有菜单的Toolbar,菜单代码如下:
<?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/menu_search" android:icon="@drawable/ic_search" android:title="Search" app:actionViewClass="android.widget.SearchView" app:showAsAction="always" /> <item android:id="@+id/menu_map" android:icon="@drawable/ic_map" android:title="Map" app:showAsAction="always"/> </menu> 请问如何修改其中搜索图标的颜色?
嘿,这问题不难解决,给你三种常用的方法,按需选择就行:
方法1:直接在menu布局里给图标加tint
最简单的方式就是在搜索item的android:icon属性下面添加android:tint,指定你想要的颜色。这样只会修改这个搜索图标的颜色,不会影响其他图标。
修改后的menu代码示例:
<?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/menu_search" android:icon="@drawable/ic_search" android:tint="@color/your_target_color" <!-- 这里添加tint属性 --> android:title="Search" app:actionViewClass="android.widget.SearchView" app:showAsAction="always" /> <item android:id="@+id/menu_map" android:icon="@drawable/ic_map" android:title="Map" app:showAsAction="always"/> </menu>
注意:把@color/your_target_color换成你项目里已定义的颜色,或者直接用#FF0000这种十六进制颜色值。
方法2:通过主题样式统一设置Toolbar图标颜色
如果你想让整个Toolbar里的所有图标(包括搜索、地图)都用同一个颜色,那可以修改你的App主题样式,这样不用逐个给item加tint。
打开res/values/styles.xml,找到你的App主题,添加actionBarIconColor或者toolbarIconTint属性:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 其他主题属性 --> <item name="actionBarIconColor">@color/your_target_color</item> <!-- 或者用这个,适配不同版本 --> <item name="toolbarIconTint">@color/your_target_color</item> </style>
这样Toolbar里的所有默认图标都会统一应用这个颜色,省心不少。
方法3:在代码里动态修改颜色
如果需要根据某些条件动态改变搜索图标的颜色,比如夜间模式切换,那可以在Activity或Fragment里通过代码设置:
Kotlin代码示例
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.your_menu_name, menu) val searchItem = menu.findItem(R.id.menu_search) // 获取搜索图标对应的Drawable val searchIcon = searchItem.icon // 设置tint颜色 searchIcon.setTint(ContextCompat.getColor(this, R.color.your_target_color)) searchItem.icon = searchIcon return super.onCreateOptionsMenu(menu) }
Java代码示例
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.your_menu_name, menu); MenuItem searchItem = menu.findItem(R.id.menu_search); Drawable searchIcon = searchItem.getIcon(); searchIcon.setTint(ContextCompat.getColor(this, R.color.your_target_color)); searchItem.setIcon(searchIcon); return super.onCreateOptionsMenu(menu); }
这样就能在运行时灵活调整图标颜色啦。
内容的提问来源于stack exchange,提问作者MichelReap
相关产品推荐
相关产品推荐

