Search Overview
Setting Up the Search Interface
Creating a Search Interface
Material icons
Android 本身就有提供查詢的功能讓開發者可以很快開發出具有查詢功能的 app;若您開發的 app 打算裝置在 Android 3.0(含) 以上,官方建議將搜尋功能顯示在 App Bar。
Google 提供一套開發者使用的 app 圖示,先去下載 查詢的 "放大鏡" 圖示,解壓後,將各解析度的圖示放在相對應的 /res/drawable-?dpi/ 資料夾,並變更圖檔檔名為 ic_search。
編輯 /res/values/strings.xml
<resources>
<string name="app_name">searchtest</string>
<string name="search_title">搜尋標題</string>
<string name="search_hint">提示</string>
</resources>
在 /res/ 下建立 xml 資料夾
新增 /res/xml/searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable
xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint" />
<!-- android:label 要與 application 相同 -->
在 /res/menu/ 建立一個 options_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
android:title="@string/search_title"
android:icon="@drawable/ic_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView" />
<!-- 注意最末這 2 行開頭要與第 5 行一致,在本例為 "app" -->
</menu>
MainActivity.java 程式內容:
import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
// 注意這裡, Android Studio 預設會幫您引入 import android.widget.SearchView
// 但我們要的是 android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView;
...
...
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
// 顯示完成鈕
searchView.setSubmitButtonEnabled(true);
return true;
}
...
...
新增 SearchResultActivity,在版面內放一個 TextView,用以顯示傳遞查詢字串
<RelativeLayout
...
...>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="search result"
android:id="@+id/txt1"/>
</RelativeLayout>
SearchResultActivity.java 程式內容:
public class SearchResultsActivity extends AppCompatActivity
{
TextView txt1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_results);
txt1 = (TextView) findViewById(R.id.txt1);
// 注意這一行指令
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent)
{
handleIntent(intent);
}
private void handleIntent(Intent intent)
{
if (Intent.ACTION_SEARCH.equals(intent.getAction()))
{
String query = intent.getStringExtra(SearchManager.QUERY);
txt1.setText("傳遞的查詢字串為 "+query.toString());
}
}
}
修改 AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- Points to searchable activity so the whole app can invoke search. -->
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultActivity" />
...
...
<!-- 啟動模式設為 singleTop, 才不會每一次查詢, 都要建立 1 個新的 activity -->
<activity
android:name=".SearchResultActivity"
android:launchMode="singleTop">
<!-- 加入下面的 intent-filter 和 meta-data -->
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
執行畫面
查詢結果畫面
相關筆記 ----
【Android Studio】為 app 加入查詢 / 尋找 / 搜尋 功能 -- 查詢 & 結果在同一個畫面內




沒有留言:
張貼留言