Как привести CustomEditText вместо EditText для SearchView? - PullRequest
0 голосов
/ 29 декабря 2018

Я хочу привести внутренний SearchView.SearchAutoComplete к CustomEditText точно так же, как этот код, как мы делаем для EditText;

SearchView searchView =(SearchView) search_menu.findItem(R.id.action_filter_search).getActionView();
EditText edtSearch = ((EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text));

Я хочу настроить его фон и так далее, поэтому вопросэто как я могу разыграть это CustomEditText?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Когда вы посмотрите на исходный код SearchView, вы признаете, что представление ввода по умолчанию надувается до R.id.search_src_text

Это функция надувания:

final int layoutResId = a.getResourceId(
            R.styleable.SearchView_layout, R.layout.search_view);

Это макет: R.layout.search_view

enter image description here

Поэтому, чтобы ответить на ваш вопрос, нет способа настроить EditText и найти его с помощьюфункция: findViewById(android.support.v7.appcompat.R.id.search_src_text));, поскольку система не может сопоставить экземпляр EditText с идентификатором, который уже привязан к другому представлению .

Для того, чтобы настроить SearchAutoComplete из SearchView,Я предлагаю 4 способа достижения этого:

  1. Использование Reflection или Transform API для редактирования стандартной реализации SeachView, которая может быть трудоемкой и трудной для выполнения.делать.
  2. Android предоставляет Диалог поиска , чтобы помочь вам реализовать многие функции, такие как голосовой поиск или предложение
  3. Настроить SearchView напрямую, вместо CustomEditText
  4. Я думаю, что SearchView$SearchAutoComplete из SearchView имеет хорошую реализацию.Он предоставляет множество обратных вызовов событий, чтобы охватить варианты использования.Как уже упоминалось в вашем вопросе, изменение фона или что-то еще не имеет большого значения.Просто возьмите вид и отредактируйте его.

enter image description here

0 голосов
/ 29 декабря 2018
SearchView searchView =(SearchView) search_menu.findItem(R.id.action_filter_search).getActionView();
EditText edtSearch = ((EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text));

if(editSearch instanceof CustomEditText){
CustomEditText customText= (CustomEditText) editSearch;
}

просто проверьте, является ли EditText экземпляром CustomEditText, и наберите его

...