編輯:關於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 UI Fundamentals裡的內容 創建自定義視圖 創建自定義UI組件首先要繼承一個視圖類. 首先創建一個簡單的自定義視圖, 展示一條十
當你想為activity進行模塊化設計的時候,可以使用碎片化的fragment.我們可以這麼說,fragment就是一個sub-activity.下面是fragment的
前言項目中有使用到水印效果,如下圖所示。在實現過程中,最終選用ItemDecoration來實現,其中有兩大步驟:自定義Drawable來完成水印圖片、使用ItemDec
上一篇博客,我們已經得到了文件夾列表,我們需要對文件列表子項添加事件,比如我們點擊的是文件,就執行 打開操作,點擊的是文件夾執行打開文件夾操作,遍歷文件清單,以此類推直到