Пользовательский SearchView полностью доступен для Android в Android
У меня в приложении есть виджет SearchView
, и я хочу задать несколько вопросов о том, как его настроить. Прежде всего, вы можете начать поиск, нажав на значок поиска, есть ли способ сделать весь SearchView
кликабельным?
Кроме того, есть ли способ заставить SearchView
выглядеть примерно так при нажатии на него?
Сейчас он находится в этом состоянии:
Вот мой код:
citySearch = (SearchView) findViewById(R.id.city_search_bar);
citySearch.setBackgroundResource(R.drawable.search_background);
citySearch.setOnSearchClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
citySearch.setIconifiedByDefault(true);
//citySearch.setIconified(true);
}
});
citySearch.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String text) {
((Filterable) cityListView.getAdapter()).getFilter().filter(text);
return false;
}
@Override
public boolean onQueryTextSubmit(String text) {
return false;
}
});
try
{
Field searchField = SearchView.class.getDeclaredField("mSearchButton");
searchField.setAccessible(true);
ImageView searchBtn = (ImageView)searchField.get(citySearch);
searchBtn.setImageResource(R.drawable.search_icon);
searchBtn.setScaleType(ScaleType.FIT_CENTER);
searchPlate.setBackgroundResource(R.drawable.search_background);
}
catch (NoSuchFieldException e)
{
Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
catch (IllegalAccessException e)
{
Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
Ответы
Ответ 1
По умолчанию SearchView "отображается", который отображается как значок увеличительного стекла, и только если пользователь нажимает на значок, то поле редактирования расширяется.
Чтобы пользователь мог щелкнуть в любом месте SearchView и расширить поле ввода. Нам просто нужно добавить прослушиватель кликов и вызвать setIconified (false), когда пользователь нажимает.
searchView = (SearchView)findViewById(R.id.searchView);
searchView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setIconified(false);
}
});
Ответ 2
Еще один простой способ сделать это, установив onActionViewExpanded()
.
searchView = (SearchView)findViewById(R.id.searchView);
searchView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
searchView.onActionViewExpanded();
}
});
Ответ 3
Чтобы разрешить запись при нажатии во всем компоненте, я бы рекомендовал вам объявить iconifiedByDefault="false"
в xml.
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"/>
Ответ 4
По умолчанию SearchView является "значком".
Поэтому вы должны использовать этот код в Java:
SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setIconified(false);
}
});
или используйте это в xml:
<SearchView
android:id="@+id/searchView"
android:iconifiedByDefault="false" />
это 2 пути правильные, но разные по иконкам.