Android/検索ボックス
提供: 初心者エンジニアの簡易メモ
検索追加サンプル
- ManifestAndroid.xml
<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.default_searchable" android:value=".SearchActivity"/> </activity> <activity android:name=".SearchActivity"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity>
- MainActivity.java // 検索を開く
// 簡易版 onSearchRequested(); // SearchManager指定版 String initialQuery="あいうえお"; Bundle appSearchData = new Bundle(); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); boolean globalSearch = false;//true:google,false:local searchManager.startSearch(initialQuery, false, getComponentName(), appSearchData, globalSearch);
- xml/searchable.xml
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:searchSettingsDescription="@string/settings_description" android:includeInGlobalSearch="true" android:searchSuggestAuthority="dictionary" android:searchSuggestIntentAction="android.intent.action.VIEW"> </searchable>
注意:android:labelとandroid:searchSettingsDescriptionは必ず@stringからロードすること、固定で文字列を入れると起動しなくなる。
- SearchActivity.java
// 検索結果 public class SearchActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_result); Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); Log.d("hoge", query); // 検索文字列取得 } } }
- res/layout/search_result.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/search_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/android:list" android:layout_height="wrap_content" android:layout_width="match_parent" android:scrollingCache="false" android:dividerHeight="1px" android:layout_gravity="top|left" android:layout_weight="90"> </ListView> <TextView android:id="@+id/android:empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="msg_no_search_result"> </TextView> </LinearLayout>
検索欄をあらかじめviewに表示させておきたい場合。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_alignParentTop="true" android:layout_width="match_parent" android:layout_height="45dip" android:background="@drawable/bg_head" android:gravity="center_vertical" android:orientation="horizontal" android:paddingLeft="5dip" android:paddingRight="5dip" > > <ImageView android:id="@+id/searchbar_icon" android:layout_width="35dip" android:layout_height="35dip" android:layout_marginRight="5dip" android:gravity="center_vertical" android:src="@drawable/ic_launcher" /> <EditText android:id="@+id/searchbar_edittext" style="@android:attr/editTextStyle" android:layout_width="0dip" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_marginTop="3dip" android:layout_weight="1" android:drawableRight="@android:drawable/ic_search" android:ellipsize="end" android:focusable="false" android:gravity="center_vertical" android:hint="search..." android:singleLine="true" /> </LinearLayout>
- 画像
res/drawable/ic_search.png res/drawable/bg_head.png
同じ画面で検索する
android:launchMode="singleTop"をつける
- AndroidManifest.xml
<activity android:name=".MainActivity" android:label="@string/app_name" android:launchMode="singleTop" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.default_searchable" android:value=".MainActivity"/> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity>
- MainActivity.java
@Override protected void onNewIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); //Toast.makeText(this, query, Toast.LENGTH_LONG).show(); } }
参考
http://developer.android.com/guide/topics/search/search-dialog.html