webentwicklung-frage-antwort-db.com.de

Wie entferne ich den Fokus von SearchView?

Ich möchte Fokus und Text von SearchView in onResume() entfernen. 

Ich habe searchView.clearFocus() versucht, aber es funktioniert nicht.

Dies ist mein XML-Code:

<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" />
19

Ich möchte Fokus und Text von SearchView in onResume() entfernen.

Um dies zu erreichen, können Sie Ihr Stammlayout mit dem Android:focusableInTouchMode-Attribut fokussierbar setzen und den Fokus auf diese View in onResume() anfordern.

Zum Beispiel:

<?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>

Und dann in deiner 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();
}
35
earthw0rmjim

gehen Sie in der Aktivität zum übergeordneten Layout und auch in fragment in framelayout das gleiche. Fügen Sie einfach dieses Attribut hinzu:

Android:focusableInTouchMode="true"
13

Verwenden Sie diese Codezeile in Ihrer onResume-Methode

if (searchView != null) {
    searchView.setQuery("", false);
    searchView.clearFocus();
    searchView.onActionViewCollapsed();
}
8
Masum

Schreiben Sie diesen Code in onResume()

  searchView.setText("");    
  this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);     
2
Megha Sharma

Nur searchView.clearFocus(); in onResume() hat meinem Fall geholfen

1
Pointyhat

Fügen Sie in Ihrem SearchView-Widget einfach hinzu

  Android:focusable="false"

Vollständiger Widget-Code

    <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" />
1
Cedriga

Die einfachste (und ich denke, die einzige zu 100% funktionierende) Lösung besteht darin, ein unsichtbares LinearLayout zu erstellen. Dieses LinearLayout bezieht den Fokus vom EditText.

0
Zeeshan Yousaf

Für diejenigen, die den Fokus loswerden möchten, wenn Activity gestartet wirdUNDdie SearchView in Menu ist, habe ich diese 3 Dinge getan, es könnte mit nur wenigen funktionieren:

1. Erstellen Sie eine übergeordnete Klasse von SearchView. Nennen wir es RafaSearchView:

class RafaSearchView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0)
    : SearchView(context, attrs, defStyleAttr) {

    init {
        setIconifiedByDefault(false)
    }
}

2.- Holen Sie sich die XML-Datei mit dem Toolbar und setzen Sie touchable="false" und 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.- Bei onCreateOptionsMenu(Menu), wenn ich meine RafaSearchView deklariere, rufen Sie an:

    searchView?.isIconified = false
    searchView?.clearFocus()
0

Ich hatte gerade den Fokus auf eine andere Ansichtsgruppe angefordert und es wurde der Fokus von der Suchansicht entfernt.

0
Raghav Sharma

Sie können die Tastatur in der onResume () - Funktion manuell wie folgt ausblenden:

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);
         }
0
taranjeetsapra