2 回答
TA贡献1803条经验 获得超3个赞
您可以执行以下步骤来更改光标颜色。
第1步:定义您自己的放置在res/drawable文件夹中的光标drawable。
my_cursor.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#0f0"/>
<size android:width="1dp"/>
</shape>
第 2 步:将此代码添加到onCreateOptionsMenu.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem findItem = menu.findItem(R.id.menu_action_search);
searchView = (SearchView) findItem.getActionView();
// Add this code
SearchView.SearchAutoComplete searchTextView = searchView.findViewById(R.id.search_src_text);
try {
Field field = TextView.class.getDeclaredField("mCursorDrawableRes");
field.setAccessible(true);
field.set(searchTextView, R.drawable.my_cursor);
} catch (Exception e) {
// Ignore exception
}
// Your logic code here
return super.onCreateOptionsMenu(menu);
}
TA贡献1906条经验 获得超3个赞
在 Android Q 及更高版本中,您可以在代码中轻松完成此操作。首先,找到你的 searchView:
SearchView search = findViewById(R.id.search);
然后使用您的 searchView 找到 searchText 字段:
EditText searchText = search.findViewById(androidx.appcompat.R.id.search_src_text);
然后使用它来更改光标的颜色:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
searchText.setTextCursorDrawable(R.drawable.cursor_primary);
}
您还需要为您希望使用的每种颜色创建一个可绘制对象。在我上面的例子中是 cursor_primary.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/colorPrimary"/>
<size android:width="1dp"/>
</shape>
就这样!
2022 年 7 月 8 日更新
后来我发现在重新启动应用程序之前,drawable 没有正确更新。因此,不要使用可绘制对象,而是使用以下命令:
searchText.getTextCursorDrawable().setTint(ContextCompat.getColor(context, R.color.colorPrimary));
..并且那个工作正常!
添加回答
举报