如何更改 KitKat 中的图标颜色?
How to change icon colors in KitKat?
我无法在搜索视图中更改 KitKat 中的图标颜色。
当我点击工具栏中的搜索图标时,它变成了这样
我点击这个镜头后工具栏变成了这样
你能建议我在 API 19 中让这些图标变白吗?
我可以用这段代码让关闭图标更亮
int idSearchCloseIcon = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_close_btn", null, null);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(idSearchCloseIcon);
searchCloseIcon.setColorFilter(Color.WHITE);
当我将 search_mag_icon
改为 search_close_btn
时,什么也没有发生。
这是我的 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_search"
android:title="@string/toolbar_menu_search"
android:icon="@drawable/ic_search_white_48dp"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView" />
<item
android:id="@+id/action_contact"
app:showAsAction="never"
android:title="@string/toolbar_menu_contact"
android:icon="@drawable/ic_contact_mail_white_48dp">
</item>
<item
android:id="@+id/action_about"
app:showAsAction="never"
android:title="@string/toolbar_menu_about">
</item>
</menu>
试试这个:
ImageView searchHintIcon = (ImageView) searchView.findViewById(idSearchCloseIcon);
Drawable newIcon = searchView.getDrawable();
if (newIcon != null) {
newIcon.mutate().setColorFilter(Color.WHITE,
PorterDuff.Mode.SRC_IN);
searchHintIcon.setDrawable(newIcon);
}
我会自己回答我的问题。这不是真正合适的解决方案,但在 api 19 上有效,可能会为某人节省很多时间。
在 onCreateOptionsMenu
中,我添加了这部分以避免您在问题中的图像 1 上看到的视图
searchView.setIconifiedByDefault(true);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.clearFocus();
searchView.requestFocusFromTouch();
比 onCreateOptionsMenu
我正在寻找编辑文本以应用一些样式。我以编程方式设置提示,这会删除此镜头图标。
// EditText styling
int idSearchTextView = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_src_text", null, null);
final EditText editText = searchView.findViewById(idSearchTextView);
if (editText != null) {
editText.setTextColor(getResources()
.getColor(R.color.primaryTextColor));
setCursorColor(editText,getResources()
.getColor(R.color.primaryTextColor));
// this is done to remove icon from a hint!!!!
editText.setHint(getString(R.string.home_search_input_hint));
}
在这种情况下,在您点击搜索按钮后,您会看到像这样展开的工具栏
但是如果您单击关闭图标,您将返回
为了避免这种情况,我重写了 onCreateOptionsMenu
中关闭按钮的时钟事件
int idSearchCloseIcon = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_close_btn", null, null);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(idSearchCloseIcon);
// add this listener to avoid return on view with lens icon
searchCloseIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(editText != null){
editText.setText("");
}
}
});
希望对您有所帮助:)
尝试使用此代码更改搜索镜头图像:
int idSearchLens = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_button", null, null);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(idSearchLens);
searchCloseIcon.setColorFilter(Color.WHITE);
fun Drawable.setDrawableTint(context: Context, @ColorRes colorRes: Int) {
val color = context.getColorByRes(colorRes)
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DrawableCompat.setTint(this.mutate(), color)
} else {
val color = context.getColorByRes(colorRes)
val drawable = this.mutate().apply {
setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
DrawableCompat.setTint(drawable, color)
}
}
我无法在搜索视图中更改 KitKat 中的图标颜色。
当我点击工具栏中的搜索图标时,它变成了这样
我点击这个镜头后工具栏变成了这样
你能建议我在 API 19 中让这些图标变白吗? 我可以用这段代码让关闭图标更亮
int idSearchCloseIcon = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_close_btn", null, null);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(idSearchCloseIcon);
searchCloseIcon.setColorFilter(Color.WHITE);
当我将 search_mag_icon
改为 search_close_btn
时,什么也没有发生。
这是我的 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_search"
android:title="@string/toolbar_menu_search"
android:icon="@drawable/ic_search_white_48dp"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView" />
<item
android:id="@+id/action_contact"
app:showAsAction="never"
android:title="@string/toolbar_menu_contact"
android:icon="@drawable/ic_contact_mail_white_48dp">
</item>
<item
android:id="@+id/action_about"
app:showAsAction="never"
android:title="@string/toolbar_menu_about">
</item>
</menu>
试试这个:
ImageView searchHintIcon = (ImageView) searchView.findViewById(idSearchCloseIcon);
Drawable newIcon = searchView.getDrawable();
if (newIcon != null) {
newIcon.mutate().setColorFilter(Color.WHITE,
PorterDuff.Mode.SRC_IN);
searchHintIcon.setDrawable(newIcon);
}
我会自己回答我的问题。这不是真正合适的解决方案,但在 api 19 上有效,可能会为某人节省很多时间。
在 onCreateOptionsMenu
中,我添加了这部分以避免您在问题中的图像 1 上看到的视图
searchView.setIconifiedByDefault(true);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.clearFocus();
searchView.requestFocusFromTouch();
比 onCreateOptionsMenu
我正在寻找编辑文本以应用一些样式。我以编程方式设置提示,这会删除此镜头图标。
// EditText styling
int idSearchTextView = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_src_text", null, null);
final EditText editText = searchView.findViewById(idSearchTextView);
if (editText != null) {
editText.setTextColor(getResources()
.getColor(R.color.primaryTextColor));
setCursorColor(editText,getResources()
.getColor(R.color.primaryTextColor));
// this is done to remove icon from a hint!!!!
editText.setHint(getString(R.string.home_search_input_hint));
}
在这种情况下,在您点击搜索按钮后,您会看到像这样展开的工具栏
但是如果您单击关闭图标,您将返回
为了避免这种情况,我重写了 onCreateOptionsMenu
int idSearchCloseIcon = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_close_btn", null, null);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(idSearchCloseIcon);
// add this listener to avoid return on view with lens icon
searchCloseIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(editText != null){
editText.setText("");
}
}
});
希望对您有所帮助:)
尝试使用此代码更改搜索镜头图像:
int idSearchLens = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_button", null, null);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(idSearchLens);
searchCloseIcon.setColorFilter(Color.WHITE);
fun Drawable.setDrawableTint(context: Context, @ColorRes colorRes: Int) {
val color = context.getColorByRes(colorRes)
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DrawableCompat.setTint(this.mutate(), color)
} else {
val color = context.getColorByRes(colorRes)
val drawable = this.mutate().apply {
setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
DrawableCompat.setTint(drawable, color)
}
}