Как удалить фокус из 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>