Android: невозможно получить кнопку поиска из searchView.
Я хочу изменить значок поиска, потому что мой значок кнопки поиска был белым.
Поэтому я нашел код, чтобы получить представление о кнопке поиска.
SearchView searchView = (SearchView) menu.findItem(R.id.action_search)
.getActionView();
//SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
//searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
int searchImgId = getResources().getIdentifier("android:id/search_button", null, null);
AppCompatImageView v = (AppCompatImageView) searchView.findViewById(searchImgId);
v.setImageResource(R.drawable.action_search);
Даже я меняю AppCompatImageView на ImageView, у меня все еще есть ноль. Я полагаю, что идентификатор кнопки поиска searchView не совпадает с идентификатором searchImgId, поэтому я получаю нулевое значение. Как мне получить правильный идентификатор для поиска кнопки поиска.
2 ответа
Я думаю, что вы не раздули файл меню XML. Вы можете сделать это, вот почему вы получаете ноль. Вы должны сначала надуть файл меню, и оттуда вы можете получить свой идентификатор кнопки поиска.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.sample_actions, menu);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
searchView.setOnQueryTextListener(this);
searchView.onActionViewExpanded();
return super.onCreateOptionsMenu(menu);
}
sample_action.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:title="@string/menu_search"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/search_white"/>
</menu>
Обновить
Вы можете искать это
searchView.setBackgroundColor(Color.BLACK);
но вы хотите полностью настроить его, вы можете попробовать это, я предлагаю меньше кода и позволить UI позаботиться о себе.
Я знаю, что это белый, и я знаю, что это не то, что вы хотите. Вы можете легко настроить его на любой drawable
и это также дает вам больше свободы играть с ним
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="8dp"
android:orientation="horizontal">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginRight="-50dp"
android:layout_weight="1"
android:hint="some Text"
android:paddingLeft="4dp" />
<ImageView
android:id="@+id/imageButton"
style="?actionBarStyle"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@android:drawable/ic_menu_search" />
</LinearLayout>
Выход
этот макет будет выглядеть примерно так, в котором вы можете изменить поиск imageView
без какого-либо шума и изменения свойств editText
согласно требованию
Так что ваши View
будет заботиться о макете, поэтому вы будете кодировать только функциональность. Скорее Android
пути