Ich versuche, die search interface manual von android.com zu folgen. Ich habe wenig Probleme und bin mir nicht sicher, was genau ich falsch gemacht habe. Einfache Android SearchView funktioniert nicht richtig
Wenn Sie sehen wollen, hier ist die project as zip Datei.
1- Die android:hint
ist nicht sichtbar, wenn ich das Suchsymbol berühre. Es kommt leer. Warum? Wenn ich es programmgesteuert setze funktioniert es zB. searchView.setQueryHint(getString(R.string.search_hint));
Warum funktioniert es nicht von XML?
2- Suchfeld nicht Fokus und Tastatur nicht automatisch angezeigt, wenn ich Suchsymbol berühren. Ich muss das Suchfeld berühren, um den Fokus zu bekommen. Ich glaube, es sollte automatisch fokussiert werden?
3- Wenn ich etwas schreibe und das Suchsymbol auf der Tastatur berühre. Ich sehe keine Protokolleinträge, die im Logcat-Fenster protokolliert wurden. Was fehlt?
4- (Gelöst) Ich versuchte android:iconifiedByDefault="false"
in XML und auch searchView.setIconifiedByDefault(false);
und es ist immer ikonifiziert, wenn ich die Anwendung starte. Warum passiert das?
- Ich fand heraus, dass iI
collapseActionView
vonapp:showAsAction
sonstsetIconifiedByDefault(false)
funktioniert nicht entfernen müssen. Auch wenn SiecollapseActionView
entfernen undsetIconifiedByDefault(false)
setzen, bricht es nie zusammen.
Ich vermute, ich etwas irgendwo verpasst, aber ich bin nicht sicher, was genau ...
sind also unter die Schritte, die ich gefolgt:
Ich begann ein neues Projekt mit ‚Grund Activity‘ Android Studio 3. Es hat eine fertige Symbolleiste und "Hallo Welt" in der Mitte.
Dann xml
Ordner hinzugefügt ich die searchable.xml
Datei mit Inhalt:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="Search hint text"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer">
</searchable>
geändert Dann AndroidManifest.xml
Datei und eine Aktivität hinzugefügt:
<activity android:name=".SearchableActivity">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
Dann ein einfaches SearchableActivity.class
erstellt. Nur um ein paar Zeilen zu schreiben.
package com.test.myapplication;
import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class SearchableActivity extends ListActivity {
private static String TAG = SearchableActivity.class.getSimpleName();
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
Log.d(TAG, "handleIntent");
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//use the query to search your data somehow
}
}
}
hinzugefügt Dann menu_main.xml
die notwendigen Artikel zu bestehenden:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.test.myapplication.MainActivity">
<item android:id="@+id/search"
android:title="@string/app_name"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.widget.SearchView" />
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never" />
</menu>
Update: Wenn ich app:actionViewClass="android.support.v7.widget.SearchView"
und auch in MainActivity.class
ändern, wenn ich import android.support.v7.widget.SearchView;
dann importieren, wenn ich auf das Suchsymbol klicken, zeigt es Standard Search...
Text wird automatisch fokussiert. Aber zeigt keinen Hinweis von XML an und dennoch gibt es keine Protokolleinträge, wenn ich Informationen einreiche.
UPDATE:
Ich erkannte, dass, wenn ich die intent-filter
setzen und den meta
Teil unter MainActivity
ich die Suchabsicht innerhalb Haupttätigkeit bin immer. Aber ich verstehe nicht, warum es die SearchableActivity
nicht startet. Da manuelle Seite für SearchView klar sagt:
Wenn ein Benutzer eine Suche aus dem Suchdialog oder Widget ausführt, startet das System Ihre durchsuchbare Aktivität und sendet es eine ACTION_SEARCH Absicht.
Ich habe versucht, dass und es löst nur 1 Problem. Jetzt bekommt das Suchfeld den Fokus. –
@EvrenYurtseite Versuchen Sie dies ** 'app: showAsAction =" collapseActionView | immer "' ** –
Es macht keinen Unterschied. Mein Verständnis ist, dass "immer" bedeutet, dass die Aktion nicht ins Menü geht. Aber ich fand heraus, dass ich 'collapseActionView' entfernen sollte und es wird nicht zusammenbrechen. Wie auch immer, das größte Problem ist, dass 'SearchView' anscheinend nichts tut, wenn ich Text einreiche und ich verstehe nicht warum? –