編輯:關於Android編程
Android的搜索建議,簡言之,就是說當用戶輸入某一個關鍵詞後,系統自動給出幾個含有相近關鍵詞的搜索建議。
效果圖如下:

MainActivity.java
package zhangphil.search;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.view.View;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button search = (Button) findViewById(R.id.search);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 發起搜索
search();
}
});
Button clear = (Button) findViewById(R.id.clear);
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clear();
}
});
}
private void search() {
// 向Android系統發起搜索請求。
this.onSearchRequested();
}
// onSearchRequested()方法可以重載 ,也可以不用重載。取決於是否有更多參數或數據傳遞給下一步操作。
// 通常代碼運行邏輯需要傳遞更多數據給下一個動作時候,則可以重載此方法以完成更多數據的傳遞。
// 如果不重載,也可以。Android系統會啟動默認的搜索框。(在UI的上方)
@Override
public boolean onSearchRequested() {
Bundle bundle = new Bundle();
bundle.putString(some key, some value);
this.startSearch(輸入搜索的關鍵詞/** 初始化搜索框中的提示詞 */
, true, bundle, false /** 此處若為true,則將啟動手機上的全局設置的那個搜索,比如Google搜索 */
);
return true;
}
// 清除全部歷史搜索記錄
private void clear() {
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
ZhangPhilSuggestionProvider.AUTHORITY,
ZhangPhilSuggestionProvider.MODE);
// 出於用戶隱私的考慮,給APP提供清除所有用戶搜索歷史記錄的選項。
suggestions.clearHistory();
}
}
onSearchRequested將觸發Android系統自動彈出搜索框。MainActivity需要的布局文件activity_main.xml很簡單,兩個按鈕,一個觸發搜索事件,一個觸發清除搜索歷史記錄動作:
AndroidManifest.xml的內容:
SearchActivity.java文件:
package zhangphil.search;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.widget.Toast;
public class SearchActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
// 存關鍵詞
saveMyRecentQuery(intent);
}
}
private void saveMyRecentQuery(Intent intent) {
// 把搜索的關鍵詞保存到Android系統的自帶的數據庫中。
// 如無必要定制,則此過程可以使用標准、通用的方法。
String query = intent.getStringExtra(SearchManager.QUERY);
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
ZhangPhilSuggestionProvider.AUTHORITY,
ZhangPhilSuggestionProvider.MODE);
suggestions.saveRecentQuery(query, null);
Toast.makeText(this, 搜索關鍵詞: + query ,Toast.LENGTH_LONG).show();
}
}
ZhangPhilSuggestionProvider.java
package zhangphil.search;
import android.content.SearchRecentSuggestionsProvider;
public class ZhangPhilSuggestionProvider extends
SearchRecentSuggestionsProvider {
// 可隨意定義一個可區別的字符串,但注意全局的唯一相同引用。
public final static String AUTHORITY = ZhangPhil_AUTHORITY;
public final static int MODE = DATABASE_MODE_QUERIES;
public ZhangPhilSuggestionProvider() {
setupSuggestions(AUTHORITY, MODE);
}
}
searchable.xml
Android自定義視圖與自定義屬性
這是Android UI Fundamentals裡的內容 創建自定義視圖 創建自定義UI組件首先要繼承一個視圖類. 首先創建一個簡單的自定義視圖, 展示一條十
Android的fragment
當你想為activity進行模塊化設計的時候,可以使用碎片化的fragment.我們可以這麼說,fragment就是一個sub-activity.下面是fragment的
android使用ItemDecoration給RecyclerView 添加水印
前言項目中有使用到水印效果,如下圖所示。在實現過程中,最終選用ItemDecoration來實現,其中有兩大步驟:自定義Drawable來完成水印圖片、使用ItemDec
Android 編程之入門開發文件夾管理器開發文件事件操作-2
上一篇博客,我們已經得到了文件夾列表,我們需要對文件列表子項添加事件,比如我們點擊的是文件,就執行 打開操作,點擊的是文件夾執行打開文件夾操作,遍歷文件清單,以此類推直到