| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[Android ]] 検索インターフェース==
[[Android]] |
*システムは適切なアクティビティを検索の結果に対して実行できる
====その他の機能[[その他]]の機能====
*ボイス検索
*最近のクエリに基づく検索サジェスト
====検索ダイアログ====
*[[Android ]] に制御される UI コンポーネント
*ユーザーによりアクティベートされたとき、検索ダイアログはアクティビティの最前面に現れる。
*Androidシステムがすべてのイベントを制御する[[Android]]システムがすべてのイベントを制御する
*ユーザーがクエリを実行したとき、システムがアクティビティにクエリを届ける
*ダイアログも検索サジェストを提供できる
*レイアウトのどこにでも配置できる
*通常のEditTextと同じように振る舞う
*すべての入力をAndroidシステムが制御するように設定できるすべての入力を[[Android]]システムが制御するように設定できる
*クエリを適切なアクティビティに届け、検索サジェストを提供するように設定できる
*しかしながら、Android しかしながら、[[Android]] 3.0 (API レベル11)以降でのみ対応
====検索可能な設定====
*XMLファイルに検索ダイアログまたはウィジェットの設定を行う[[XML]]ファイルに検索ダイアログまたはウィジェットの設定を行う
*設定の内容は、ボイスサーチ、検索サジェスト、検索ボックスへのヒントテキスト
==手順==
===検索可能な設定===
*最初のステップは、検索可能な設定と呼ばれるXMLファイル最初のステップは、検索可能な設定と呼ばれる[[XML]]ファイル
*検索ダイアログもしくはウィジェットの設定
*検索サジェストやボイスサーチなどがどのように振る舞うのかの定義
*このファイルは伝統的に、searchable.xml とし、/res/xml/ に保存されるべき
<blockquote>システムはこのファイルを SearchableInfo オブジェクトを初期化するのに利用する。アプリケーションからこのオブジェクトを生成できないので、設定をXMLファイルに記述する必要があるオブジェクトを初期化するのに利用する。アプリケーションからこのオブジェクトを生成できないので、設定を[[XML]]ファイルに記述する必要がある</blockquote>
*searchable 設定ファイルは、<searchable> 要素をrootノードとして含む必要がある
===検索可能なアクティビティの作成===
*検索可能なアクティビティとは、クエリ文字列を元に検索を実行し、検索結果を表示するアクティビティ
*ユーザーが検索をダイアログまたはウィジェットから行ったとき、システムは、検索可能なアクティビティを開始し、検索クエリをACTION_SEARCH ユーザーが検索をダイアログまたはウィジェットから行ったとき、システムは、検索可能なアクティビティを開始し、検索クエリをACTION_SEA[[R]]CH アクションとともにインテントを届ける*検索可能なアクティビティはインテントの、QUERY 検索可能なアクティビティはインテントの、QUE[[R]]Y extra からクエリを参照し、検索結果を表示する
*検索ダイアログもしくはウィジェットを他のどんなアクティビティに含むこともできるのは、システムは、どのアクティビティが検索可能アクティビティか知っている必要があるので、正確に検索クエリを届けることができる
*まず、検索可能アクティビティを [[Android ]] manifest ファイルに宣言する必要がある
====検索可能アクティビティの宣言====
*検索機能はまだ実装する必要はない。
#アクティビティが ACTION_SEARCH ACTION_SEA[[R]]CH インテントを 受け取るように、<intent-filter>に宣言する
#検索設定を <meta-data> に記述する
=====例=====
<application ... >
<activity acti[[vi]]ty android:name=".SearchableActivitySearchableActi[[vi]]ty" >
<intent-filter>
<action android:name="android.intent.action.SEARCHSEA[[R]]CH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activityacti[[vi]]ty>
...
</application>
*伝統的に、検索結果は、ListView に表示するとよい。
*よって、検索可能アクティビティは、ListActrivity よって、検索可能アクティビティは、ListActri[[vi]]ty を継承させるとよい。*ListActivityは、ListViewを含み、いくつかの便利なメソッドを提供するListActi[[vi]]tyは、ListViewを含み、いくつかの便利なメソッドを提供する
====クエリの受け取り====
*ユーザーが検索をダイアログまたはウィジェットから実行した場合、システムは検索可能アクティビティを開始し、ACTION_SEARCHインテントを送信するユーザーが検索をダイアログまたはウィジェットから実行した場合、システムは検索可能アクティビティを開始し、ACTION_SEA[[R]]CHインテントを送信する*このインテントは、クエリを QUERY QUE[[R]]Y 文字列 extra に含んでいる。
*アクティビティの開始で、インテントをチェックする。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView([[R]].layout.search);
// Get the intent, verify the action and get the query
Intent intent = getIntent();
if (Intent.ACTION_SEARCHACTION_SEA[[R]]CH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERYQUE[[R]]Y);
doMySearch(query);
}
====データの検索====
*データのストアと検索はアプリケーション固有の処理
*SQLite [[SQL]]ite の利用や オンラインの利用が考えられる
====結果の表示====
*上記でも述べたが、ListViewおよびListActivityの利用が推奨上記でも述べたが、ListViewおよびListActi[[vi]]tyの利用が推奨
===検索ダイアログの利用===
*検索ダイアログは検索サジェストを提供できる
*システムは検索クエリを検索可能アクティビティに送信する
*しかしながら、Android しかしながら、[[Android]] 3.0デバイス向けのアプリケーションを開発しているなら、検索ウィジェットを利用することを検討した方がよい
*検索ダイアログは通常は非表示になっている
*デバイスが検索ボタンを持っている場合、押されることでアクティブになる
*アプリケーションは、onSearchRequestedアプリケーションは、onSearch[[R]]equested() が呼ばれることでもアクティブになる
*検索ダイアログを使用可能にするには、システムに検索可能アクティビティが検索ダイアログからクエリを受け取ることをシステムに示さなければいけない
*検索可能アクティビティを宣言するには、<meta-data> 要素を受け取り側のアクティビティの <activityacti[[vi]]ty> 要素に追加する。
*<meta-data> 要素は、検索可能アクティビティクラスを特定する、android:value 属性を含む必要がある。
*また、android:name 属性を android.app.default_searchable という値とともに記述する
<application ... >
<!-- 検索可能アクティビティ; 検索を実行する -->
<activity acti[[vi]]ty android:name=".SearchableActivitySearchableActi[[vi]]ty" >
<intent-filter>
<action android:name="android.intent.action.SEARCHSEA[[R]]CH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activityacti[[vi]]ty>
<!-- 検索ダイアログを検索可能アクティビティの中で検索を開始するために検索ダイアログを有効にするアクティビティ -->
<activity acti[[vi]]ty android:name=".OtherActivityOtherActi[[vi]]ty" ... >
<!-- 検索可能アクティビティに検索を送信するための検索ダイアログを有効にする -->
<meta-data android:name="android.app.default_searchable"
android:value=".SearchableActivitySearchableActi[[vi]]ty" /> </activityacti[[vi]]ty>
...
</application>
*OtherActivity OtherActi[[vi]]ty は、<meta-data> 検索可能アクティビティの <meta-data>を 含んでいるので、アクティビティは検索ダイアログを有効化できる。*ユーザーがこのアクティビティにいる間、デバイスの検索ボタンおよび onSearchRequestedonSearch[[R]]equested() メソッドは、検索ダイアログをアクティブにする*ユーザーが検索を実行すると、システムは検索可能なアクティビティを開始し、ACTION_SEARCH ユーザーが検索を実行すると、システムは検索可能なアクティビティを開始し、ACTION_SEA[[R]]CH インテントを送信する
*アプリケーションのすべてのアクティビティで検索ダイアログを提供したい場合、上記の <meta-data> 要素を <application> の子供として挿入する。
*現在のアクティビティで、検索可能アクティビティを利用するように宣言さえしてあれば、デバイスの検索ボタンで、検索ダイアログを開く
*しかしながら、いくつかのデバイスでは、検索ボタンを持っていないので、検索ボタンがいつでも利用可能であると仮定してはいけない。
*検索ダイアログを利用する場合、UIに、onSearchRequested検索ダイアログを利用する場合、UIに、onSearch[[R]]equested()を呼ぶことで検索ダイアログを有効化する、他の検索ボタンを提供すべき
====アクティビティライフサイクルにおける検索ダイアログの影響====
=====例=====
@Override
public boolean onSearchRequestedonSearch[[R]]equested() {
pauseSomeStuff();
return super.onSearchRequestedonSearch[[R]]equested();
}
android:label="@string/search_label"
android:hint="@string/search_hint"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizerlaunch[[R]]ecognizer" >
</searchable>
*showVoiceSearchButton の値は音声検索を有効にするのに必須
*launchRecognizer launch[[R]]ecognizer は音声検索ボタンが変換されたテキストを検索アクティビティに戻す音声認識機を起動すべきか設定する
*音声検索に追加の属性を提供することができる[http://developer.android.com/guide/topics/search/searchable-config.html 設定]を参照

案内メニュー