Как удалить фокус из SearchView?
Я хочу удалить фокус и текст из SearchView
в onResume()
.
Я пробовал searchView.clearFocus()
, но он не работает.
Это мой xml-код:
<SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/toolbar"
android:layout_alignTop="@+id/toolbar"
android:layout_centerVertical="true"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:iconifiedByDefault="false"
android:paddingLeft="16dp"
android:paddingRight="16dp" />
Ответы
Ответ 1
Я хочу удалить фокус и текст из SearchView
в onResume()
Чтобы достичь этого, вы можете установить корневую компоновку с фокусом с android:focusableInTouchMode
атрибута android:focusableInTouchMode
и запросить фокус на этом View
в onResume()
.
Например:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusableInTouchMode="true">
<SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"/>
</LinearLayout>
И тогда в вашей Activity
:
private View rootView;
private SearchView searchView;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
rootView = findViewById(R.id.root_layout);
searchView = (SearchView) findViewById(R.id.search_view);
}
@Override
protected void onResume() {
super.onResume();
searchView.setQuery("", false);
rootView.requestFocus();
}
Ответ 2
когда в действии перейти к родительскому макету, а в fragment
тоже сделать то же самое в framelayout
. Просто добавьте этот атрибут:
android:focusableInTouchMode="true"
Ответ 3
Используйте эту строку кода в методе onResume
if (searchView != null) {
searchView.setQuery("", false);
searchView.clearFocus();
searchView.onActionViewCollapsed();
}
Ответ 4
В вашем виджете SearchView просто добавьте
android:focusable="false"
Полный код виджета
<android.support.v7.widget.SearchView
android:id="@+id/your_search_view_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:iconifiedByDefault="false"
app:queryHint="Search something..."
android:focusable="false" />
Ответ 5
Введите этот код в onResume()
searchView.setText("");
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Ответ 6
Я просто запросил фокус на какой-то другой группе просмотра, и он удалил фокус из поиска. Как и в родительской группе просмотра, например, (Linearlayout, RelativeLayout), в которой присутствует вид поиска, добавьте
focusable = false; focusableInTouchMode=true
в родительскую группу просмотра.
Ответ 7
Просто searchView.clearFocus();
в onResume()
помог мой случай
Ответ 8
Самое простое (и я думаю, единственное 100% работающее) решение - создать невидимый LinearLayout
. Этот LinearLayout
захватит фокус с EditText
.
Ответ 9
Вы можете вручную скрыть клавиатуру в функции onResume() как:
InputMethodManager imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE);
View view = context.getCurrentFocus();
if (view == null) {
view = new View(context);
}
if (view != null) {
IBinder iBinder = view.getWindowToken();
imm.hideSoftInputFromWindow(iBinder, 0);
}
Ответ 10
Для тех, кто хочет избавиться от фокуса при запуске Activity
и SearchView
в Menu
, я сделал эти 3 вещи, с некоторыми из них может работать:
1.- Создайте родительский класс SearchView
. Давайте назовем это RafaSearchView
:
class RafaSearchView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0)
: SearchView(context, attrs, defStyleAttr) {
init {
setIconifiedByDefault(false)
}
}
2.- Получите XML, где у вас есть Toolbar
, и установите touchable="false"
и focusableInTouchMode="true"
:
<androidx.appcompat.widget.Toolbar
android:id="@+id/searchToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/white"
android:focusable="false"
android:focusableInTouchMode="true"
android:theme="@style/ToolBarStyle"
app:popupTheme="@style/AppTheme.PopupOverlay" />
3.- В onCreateOptionsMenu(Menu)
когда я объявляю свой RafaSearchView
, вызовите:
searchView?.isIconified = false
searchView?.clearFocus()
Ответ 11
Я просто использую android:focusable="false"
<SearchView
android:layout_width="match_parent"
android:id="@+id/search"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:focusable="false"
android:iconifiedByDefault="false"
android:layout_height="wrap_content">
</SearchView>