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
