Изменение цвета курсора в SearchView без ActionBarSherlock
Я пытаюсь изменить цвет мигающего курсора виджета SearchView в ICS+. Я попробовал следующее:
- добавлять
<item name="android:textCursorDrawable">@null</item>
к моему тема - добавление стиля для AutoCompleteTextViews в мою тему и установка textCursorAttribute этого стиля в @null
- задание
android:textCursorDrawable="@null"
непосредственно в SearchView
Я читаю ответ здесь (пользовательский цвет курсора в SearchView), но нет non-ABS стиль для searchAutoCompleteTextView, поэтому не мог попробовать это. Я также искал метод Java для установки текстового курсора drawable, но не смог его найти - я изменяю другие аспекты SearchView в Java и смог бы сделать это с помощью курсора, если бы был доступен метод.
Я настроил SearchView довольно широко, но это последнее изменение не позволяет ему смотреть вправо - курсор белый на белом фоне, поэтому его нелегко увидеть. Любой другие идеи вещей, которые я могу попробовать?
4 ответов
на основе комментариев и ответов выше я привел пример как это может выглядеть с помощью отражения. Это решает проблему в моем приложении. Надеюсь, это сэкономит кому-то время.
@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 может быть любым другим идентификатором ресурса, таким как R. drawable.my_cursor
<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>
согласно предыдущему комментарию:
Если вы копаетесь в исходном коде Android, вы найдете это mCursorDrawableRes
устанавливается только один раз в конструкторе 3-param. К сожалению, это означает, что нет простого способа изменить его во время выполнения. Похоже, ваши варианты могут быть ограничены использованием отражения или перемещением пользовательского SearchView
на android.widget
пакет для доступа к защищенному члену пакета.
это изменяет цвет текста и работает также на 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));
...