Виджет SearchView — любой способ выделить ВЕСЬ текст внутри?

#android #android-widget

#Android #android-виджет

Вопрос:

Я использую виджет SearchView (новый в Honeycomb). Я могу установить начальный текст с помощью setQuery, это работает.

Но есть ли какой-нибудь способ выделить весь текст внутри (аналогично EditText.selectAll)?

Я хотел бы предоставить пользователю предустановленный текст из предыдущего поиска, но простой способ ввести новый текст без необходимости удалять старый.

Ответ №1:

Вам просто нужно захватить внутренний EditText, а затем делать все, что вы хотите.

 EditText edit = (EditText)searchView.findViewById(R.id.search_src_text);
edit.selectAll();
  

Ответ №2:

Немного поздно, но у меня была похожая проблема.

Я хотел бы предоставить пользователю предустановленный текст из предыдущего поиска, но простой способ ввести новый текст без необходимости удалять старый.

Я нашел решение, которое сработало для меня. Вам просто нужно получить доступ к внутреннему EditText, а затем выделить весь текст обычным способом.

Для этого попробуйте что-то вроде следующего. Пожалуйста, обратите внимание, что мой код написан на c #, а не на Java, но похож.

 int id = searchView.Context.Resources.GetIdentifier("android:id/search_src_text", null, null);
EditText editText = searchView.FindViewById<EditText>(id);
editText.SelectAll();
  

В Java это должно быть что-то вроде этого:

 int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
EditText editText = (EditText) searchView.findViewById(id);
editText.selectAll();
  

Я только что протестировал его на уровне API 15! Но я думаю, что это работает и на более низких уровнях.

Ответ №3:

То, что вы хотите сделать, хорошо работает на ПК, но не очень удобно на сенсорных устройствах.

Я бы использовал поставщика предложений, чтобы позволить пользователю повторно использовать недавние поиски, возможно, с включенным уточнением запросов.