如何将搜索小部件图标更改为 androidx 的白色
How can I change the Search Widget Icon to be white for androidx
我已经通读了我能找到的所有问题,并尝试了很多方法但没有任何效果。很多答案似乎都与 v7 支持库有关。我正在使用 AndroidX 和 Kotlin。我想将 searchIcon 和 closeIcon 的颜色更改为白色。我还想删除 searchHintIcon。
AndroidManifest.xml
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
菜单
<item
android:id="@+id/action_search"
android:orderInCategory="1"
app:showAsAction="ifRoom"
android:title=""
app:actionViewClass="androidx.appcompat.widget.SearchView" />
styles.xml (值-v21)
<resources>
<style
name="AppTheme"
parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!--changes the search text to white -->
<item name="android:editTextColor">@color/white</item>
<item name="searchViewStyle">@style/AppTheme.SearchView</item>
</style>
<style name="AppTheme.SearchView" parent="Widget.AppCompat.SearchView">
<item name="searchIcon">@drawable/ic_action_search_white</item>
<item name="android:searchIcon">@drawable/ic_action_search_white</item>
<item name="android:closeIcon">@drawable/ic_action_clear_white</item>
<item name="closeIcon">@drawable/ic_action_clear_white</item>
<item name="searchHintIcon">@null</item>
</style>
</resources>
我没有使用工具栏,只使用操作栏。如果可能的话,我想使用 xml 更改图标颜色。如果有帮助,很高兴添加工具栏。
我终于弄明白了,所以我会回答我自己的问题。
我已将菜单更改为:
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:title="Search"
android:icon="@drawable/ic_action_search_white"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView"/>
collapseActionView 修复了该问题并允许拾取图标。我拒绝使用它,因为我的行为很奇怪。
更新 OnCreateOptionsMenu 后一切正常,图标为白色
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
menuInflater.inflate(R.menu.menu_search, menu)
sv = menu.findItem(R.id.action_search).actionView as SearchView
sv.isSubmitButtonEnabled = false
sv.setOnQueryTextListener(this)
return true
}
为了完整起见,这里是其余代码:
override fun onQueryTextSubmit(query: String?): Boolean {
getData(query.toString())
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
getData(newText.toString())
return true
}
private fun getData(newText: String) {
searchTerm = "%".plus(newText).plus("%")
//todo ... get the data from the db
}
我已经通读了我能找到的所有问题,并尝试了很多方法但没有任何效果。很多答案似乎都与 v7 支持库有关。我正在使用 AndroidX 和 Kotlin。我想将 searchIcon 和 closeIcon 的颜色更改为白色。我还想删除 searchHintIcon。
AndroidManifest.xml
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
菜单
<item
android:id="@+id/action_search"
android:orderInCategory="1"
app:showAsAction="ifRoom"
android:title=""
app:actionViewClass="androidx.appcompat.widget.SearchView" />
styles.xml (值-v21)
<resources>
<style
name="AppTheme"
parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!--changes the search text to white -->
<item name="android:editTextColor">@color/white</item>
<item name="searchViewStyle">@style/AppTheme.SearchView</item>
</style>
<style name="AppTheme.SearchView" parent="Widget.AppCompat.SearchView">
<item name="searchIcon">@drawable/ic_action_search_white</item>
<item name="android:searchIcon">@drawable/ic_action_search_white</item>
<item name="android:closeIcon">@drawable/ic_action_clear_white</item>
<item name="closeIcon">@drawable/ic_action_clear_white</item>
<item name="searchHintIcon">@null</item>
</style>
</resources>
我没有使用工具栏,只使用操作栏。如果可能的话,我想使用 xml 更改图标颜色。如果有帮助,很高兴添加工具栏。
我终于弄明白了,所以我会回答我自己的问题。 我已将菜单更改为:
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:title="Search"
android:icon="@drawable/ic_action_search_white"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView"/>
collapseActionView 修复了该问题并允许拾取图标。我拒绝使用它,因为我的行为很奇怪。
更新 OnCreateOptionsMenu 后一切正常,图标为白色
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
menuInflater.inflate(R.menu.menu_search, menu)
sv = menu.findItem(R.id.action_search).actionView as SearchView
sv.isSubmitButtonEnabled = false
sv.setOnQueryTextListener(this)
return true
}
为了完整起见,这里是其余代码:
override fun onQueryTextSubmit(query: String?): Boolean {
getData(query.toString())
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
getData(newText.toString())
return true
}
private fun getData(newText: String) {
searchTerm = "%".plus(newText).plus("%")
//todo ... get the data from the db
}