AndroidAPIガイドの説明に従ってSearchWidgetを設定しました。アクションバーに虫眼鏡アイコンが正しく表示され、クリックすると、アクションバー(背景が暗い入力フィールド)内で検索ウィジェットが起動します。
ただし、仮想デバイスの検索ボタンを押すと、別の検索フィールドが起動します。背景が白で、指定したコールバックメソッドを呼び出しません。
そこで、これをMainActivityクラスに追加しました。
public boolean onSearchRequested() {
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setIconified(!searchView.isIconified());
return false;
}
検索ウィジェットの設定は、ドキュメントで説明されているものとまったく同じです。
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(new CustomSearchQueryTextListener());
私のsearchable.xml:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name">
</searchable>
そしてAndroidManifest.xml:
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:uiOptions="splitActionBarWhenNarrow" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>
setIconfied()メソッドを試した理由は、AndroidAPIガイドの「検索ボックスの表示を切り替える機能」に次のように記載されているためです。
「デフォルトでは、検索ウィジェットは「アイコン化」されています。つまり、検索アイコン(虫眼鏡)のみで表され、ユーザーが検索ボックスに触れると拡大して検索ボックスが表示されます。上記のように、検索を表示できます。デフォルトでは、setIconifiedByDefault(false)を呼び出すことにより、ボックスを選択します。setIconified()を呼び出すことにより、検索ウィジェットの外観を切り替えることもできます。」
私も電話をかけようとしましstartSearch("", false, null, false);
たが、これにより同じ検索フィールドが白い背景で表示されます。
だから私の質問は:ユーザーがデバイスの検索ボタンを押した場合、つまり検索メニュー項目がクリックされた場合とまったく同じアクションを実行した場合、アクションバー内で検索ウィジェットを起動することは可能ですか?