2015-05-26 5 views
12

Ich verwende ein Search-View-Element in meinem Fragment, um die Suchfunktion zu implementieren.Android - Gesamte Suchleiste anklickbar machen

<SearchView 
    android:id="@+id/search_bar" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="7dp" 
    android:layout_marginLeft="7dp" 
    android:layout_marginRight="7dp" 
    android:layout_marginBottom="7dp" 
    android:background="@color/white" /> 

enter image description here

Das Problem ist nur das Suchsymbol in der Suchleiste klickbare anderer Bereich ist nicht anklickbar ist, wenn ich das Symbol i suchen kann nur klicken kann.

enter image description here

Können Sie mir bitte helfen, den gesamten Suchbereich klickbare zu machen.

enter image description here

+0

Versuch hinzuzufügen 'android: anklickbare =„true“' auf die 'SearchView' – Lamorak

+0

Wenn Sie es machen wollen klickbare dann suchen, wie kommen Sie bearbeiten wollen der Text darin geschrieben und es ist nicht fokussiert? – pratz9999

+0

@Lamorak: Es funktioniert nicht beim Hinzufügen von android: clickable = "true" zu meinem Code. Nun kann auch der andere Bereich nicht angeklickt werden, um mit der Suche zu beginnen. – Saran

Antwort

4

Was bedeuten die klickbare? Suchaktion auslösen oder den Bearbeitungsbereich fokussieren? Wenn es der erste ist, können Sie einfach das Symbol klickbar = false machen. und das gesamte Layout klickbar machen und einen Ereignis-Listener implementieren.

<SearchView 
android:id="@+id/search_bar" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:clickable="true" 
android:click="onClick" 
android:layout_marginTop="7dp" 
android:layout_marginLeft="7dp" 
android:layout_marginRight="7dp" 
android:layout_marginBottom="7dp" 
android:background="@color/white" /> 

sollte die onClick Methode

sein
public void onClick(View v) { 
  InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)); 
    im.showSoftInput(editText, 0); 
} 
+2

Klickbar bedeutet: Wenn ich irgendwo auf die Suchleiste klicke, wenn sie nicht fokussiert ist, sollte der Suchvorgang beginnen. – Saran

+0

Dann, wenn Sie den Bearbeitungsbereich berühren, was ist die Aktion? Bearbeiten Sie die Dinge, die Sie suchen oder einfach suchen möchten? Sie können den Schlüsselereignis-Listener implementieren, indem Sie die EINGABETASTE drücken. – Sethbrin

+0

Ok, aber wir haben nur zwei öffentliche Methoden für die Suche-Ansicht ** "onQueryTextChange", "onQueryTextSubmit", ** dann, wie ** onClick ** Listener zu Search-View zu implementieren, wenn ja, kann ich die iconified zu setzen richtig auf diesem Klick Listener richtig? – Saran

1

fügen Sie diese android:iconifiedByDefault="false" auf Ihre xml wird es Ihre Suche geöffnet halten.

und um es zu löschen fügen Sie clearfocus zu Ihrem Searchview-Objekt hinzu.

5
search_bar.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     search_bar.onActionViewExpanded(); 
    } 
}); 
5

Der Trick ist nicht so sehr die gesamte Fläche zu machen anklickbar, so viel wie sie es zu erweitern und dann die Tastatur auszublenden.

Zuerst Ihr Layout in der XML ist in Ordnung, lassen Sie es wie es ist, in Java, möchten Sie die folgenden Funktionen haben:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 

    //Define your Searchview 
    SearchView searchView = (SearchView) findViewById(R.id.search_bar); 

    //Turn iconified to false: 
    searchView.setIconified(false); 
    //The above line will expand it to fit the area as well as throw up the keyboard 

    //To remove the keyboard, but make sure you keep the expanded version: 
    searchView.clearFocus(); 
} 

Was erreicht dies ist es, die Tastatur auf die gesamte Länge erweitert von Der Bereich konzentriert sich darauf, sodass der gesamte Bereich anklickbar ist. Anschließend wird die Tastatur entfernt, sodass sie dem Benutzer so aussieht, als könne sie auf dieses Feld klicken und eine Tastatur aufrufen.

Sollte erreichen, was Sie suchen.

-Sil

+2

Dies ist einfach und sauber – user3290180

25

Dies kann einfach durch das Setzen Iconified auf false auf OnClick von Search erfolgen.

searchBar.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     searchBar.setIconified(false); 
    } 
}); 

Referenz: Eric Lui's answer

Hoffentlich wird es helfen.

+1

Dies sollte die akzeptierte Antwort sein. – stevyhacker

+0

das funktioniert gut! –

0

searchView.setIconified (false) arbeitete