我正在尝试更改ICS +中SearchView小部件上闪烁光标的颜色。我尝试过以下方法:
<item name="android:textCursorDrawable">@null</item>
添加到我的
主题android:textCursorDrawable="@null"
我在这里阅读了答案(Custom cursor color in SearchView),但是没有针对searchAutoCompleteTextView的非ABS样式,所以无法尝试这一点。我还寻找了一个Java方法来设置文本光标drawable,但找不到 - 我正在修改Java中SearchView的其他方面,并且如果有可用的方法,将能够使用光标。
我已经非常广泛地定制了SearchView,但是最后一次更改是让它看起来不正确 - 光标在白色背景上是白色的,所以它不容易看到。我可以尝试其他任何想法吗?
答案 0 :(得分:55)
根据上面的评论和答案,我举了一个例子,说明了如何使用反射。这解决了我的应用程序中的问题。希望它能节省一些时间。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.entity_list_actions, menu);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
final int textViewID = searchView.getContext().getResources().getIdentifier("android:id/search_src_text",null, null);
final AutoCompleteTextView searchTextView = (AutoCompleteTextView) searchView.findViewById(textViewID);
try {
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.set(searchTextView, 0); //This sets the cursor resource ID to 0 or @null which will make it visible on white background
} catch (Exception e) {}
return super.onCreateOptionsMenu(menu);
}
该0可以是任何其他资源ID,如R.drawable.my_cursor
答案 1 :(得分:3)
<style name="CustomTheme" parent="android:Theme.Holo.Light">
...
<item name="android:autoCompleteTextViewStyle">@style/SearchViewStyle</item>
...
</style>
<style name="SearchViewStyle" parent="@android:style/Widget.Holo.Light.AutoCompleteTextView">
<item name="android:textCursorDrawable">@drawable/action_mode_close</item>
</style>
答案 2 :(得分:1)
根据之前的评论:
如果你深入研究Android源代码,你会发现mCursorDrawableRes
只能在3-param构造函数中设置一次。不幸的是,这意味着没有简单的方法可以在运行时更改它。看起来您的选项可能仅限于使用反射,或将自定义SearchView
移动到android.widget
包中以访问受保护包的成员。
答案 3 :(得分:1)
这会更改文字颜色,也适用于Android 8:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu_search, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
SearchView.SearchAutoComplete theTextArea = (SearchView.SearchAutoComplete) searchView
.findViewById(R.id.search_src_text);
theTextArea.setTextColor(getResources().getColor(R.color.yourColor));
...