編輯:Android開發實例
浮動搜索框的使用其實並不難,而是在於它的配置非常之繁瑣,對於它的使用主要是方便開發者對於程序中有搜索業務時,更好的設計UI
SearchManager具體使用步驟如下:
(1)配置search bar的相關信息,新建一個位於res/xml下的一個searchable.xml的配置文件,如默認值、是否有搜索建議或者語音搜索。
<searchable xmlns:android=http://schemas.android.com/apk/res/android <!-- label為搜索框上方的文本,hint搜索框裡面的提示文本,顯示label -->
android:label="@string/search_label"
android:hint="@string/search_hint"
android:searchMode="showSearchLabelAsBadge"
<!-- 語音搜索配置 -->
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
android:voiceLanguageModel="free_form"
android:voicePromptText="@string/search_invoke" <!-- 配置搜索建議,配置錯誤將不會顯示,這裡的searchSuggestAuthority的值必須是 繼承自SearchRecentSuggestionsProvider的完整路徑名 --> android:searchSuggestAuthority="com.android.cbin.SearchSuggestionSampleProvider"
android:searchSuggestSelection=" ? "
/>
(2) manifest.xml配置,搜索結果處理的Activity將出現兩種情況,一種是從其他Activity中的search bar打開一個Activtiy
專門處理搜索結果,第二種是就在當前Activity就是處理結果的Activity,先介紹第一種配置:
<activity android:name="SearchResultActivity">
<intent-filter>
<action android:name="android.intent.action.SEARCH"></action>
</intent-filter> <!-- 指定上面的searchable.xml文件 --> <meta-data android:resource="@xml/searchable" android:name="android.app.searchable"></meta-data>
</activity>
<!-- 為了使每一個Activity都能使用search bar,一定要將這個標簽放到啟動Activity中,裡面的value指定
的是前面的搜索結果Activity-->
<meta-data android:name="android.app.default_searchable"
android:value=".SearchResultActivity" />
(3)搜索建議在manifest.xml中相關的配置
<!--之前searchable.xml中有一個searchSuggestAuthority的值其實和這裡的authorities指向的都是name中所關聯的SearchSuggestionSampleProvider,他是一個SearchRecentSuggestionsProvider的子類--> <provider android:name="SearchSuggestionSampleProvider" android:authorities="com.android.cbin.SearchSuggestionSampleProvider"></provider>
(4)為了能夠使用search bar 我們必須重寫Activity的onSearchRequested的方法,在界面上啟動一個search bar
但是這個動作不會自動觸發,必須通過一個按鈕或者菜單的點擊事件觸發;
@Override
public boolean onSearchRequested(){
String text=etdata.getText().toString();
Bundle bundle=new Bundle();
bundle.putString("data", text);
//打開浮動搜索框(第一個參數默認添加到搜索框的值)
//bundle為傳遞的數據
startSearch("mm", false, bundle, false);
//這個地方一定要返回真 如果只是super.onSearchRequested方法不但 //onSearchRequested(搜索框默認值)無法添加到搜索框中,bundle也無法傳遞出去
return true;
}
(5)接收query和bundle、保存query值(即搜索建議的列表值)
public void doSearchQuery(){
final Intent intent = getIntent();
//獲得搜索框裡值
String query=intent.getStringExtra(SearchManager.QUERY);
tvquery.setText(query);
//保存搜索記錄
SearchRecentSuggestions suggestions=new SearchRecentSuggestions(this,
SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
suggestions.saveRecentQuery(query, null);
if(Intent.ACTION_SEARCH.equals(intent.getAction())){
//獲取傳遞的數據
Bundle bundled=intent.getBundleExtra(SearchManager.APP_DATA);
if(bundled!=null){
String ttdata=bundled.getString("data");
tvdata.setText(ttdata);
}else{
tvdata.setText("no data");
}
}
}
之前說到了處理結果的Activity將可能出現的兩種情況的兩種,現在就處理第二種狀況,就是假如invoke search bar的
Activity同時也是處理搜索結果的Activity,如果按照之前的方式處理則會出現一種情況,搜索一次就實例化一次Activity,當按返回
鍵的時候會發現老是同一個Activity,其實為了使它只有一個實例化對象,只需簡單的配置和代碼就能實現
第一:在處理搜索結果Activity的manifest.xml中添加android:launchMode="singleTop"屬性
第二:重寫Activity的onNewIntent(Intent intent)
@Override
public void onNewIntent(Intent intent){
super.onNewIntent(intent);
//獲得搜索框裡值
String query=intent.getStringExtra(SearchManager.QUERY);
tvquery.setText(query);
//保存搜索記錄
SearchRecentSuggestions suggestions=new SearchRecentSuggestions(this,
SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
suggestions.saveRecentQuery(query, null);
if(Intent.ACTION_SEARCH.equals(intent.getAction())){
//獲取傳遞的數據
Bundle bundled=intent.getBundleExtra(SearchManager.APP_DATA);
if(bundled!=null){
String ttdata=bundled.getString("data");
tvdata.setText(ttdata);
}else{
tvdata.setText("no data");
}
}
}
相關知識:上面講到了將最近的搜索值添加到搜索建議中,但卻沒有提到如果清理搜索建議中的值,與保存相似,SearchRecentSuggestion對象提供了一個clearHistory()方法
private void clearSearchHistory() {
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
SearchSuggestionSampleProvider.AUTHORITY, SearchSuggestionSampleProvider.MODE);
suggestions.clearHistory();
}
忘了上效果圖:oye
轉自:http://www.cnblogs.com/jico/archive/2010/11/05/1869814.html
本文介紹一個簡易的標准體重計算器Android應用的開發實例。此功能在以前的手
項目打包生成apk過程: 1、生成簽名文件,並且指定所在位置 2、使用生成的簽名文件,給工程打包生成一個apk 生成簽名文件,並且指定所在位置
今天看到一個ios寫的圖靈機器人,直接去官網(http://www.tuling123.com/openapi/)看了下API接入,太簡單了,就一個get請求~於
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩