2011-09-18 104 views
0

我有一個菜單項,設置Android的搜索插件選項使用搜索小工具爲actionViewClass,看起來像這樣:通過檢索XML配置

 <item android:id="@+id/menu_search" 
     android:title="Search" 
     android:icon="@drawable/ic_menu_search" 
     android:showAsAction="always" 
     android:actionViewClass="android.widget.SearchView" />  

它工作正常,但我似乎提上了Android網站文檔可搜索的XML配置文件是這樣的:

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="string resource" 
    android:hint="string resource" /> 

我怎樣才能菜單項搜索小插件使用上面的配置?我認爲它是值得做的SearchManager.setSearchableInfo方法,我得到一個句柄搜索小工具在我的代碼是這樣的:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
SearchView searchItem = (SearchView) menu.findItem(R.id.menu_search).getActionView();  

searchItem.setSearchableInfo(searchManager.getSearchableInfo(R.layout.searchable)); 

正如你可以看到我想要做的事就像上面的getSearchableInfo方法傳入我的可搜索配置文件的ID。

任何人都可以幫我嗎?

回答

4

您需要創建一個SearchActivity,它處理來自搜索小部件的搜索查詢並顯示搜索結果,並且還需要在android清單文件中聲明它。

搜索活動的一個例子:

public class SearchEngine extends Activity 
{ 

TextView result; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.search_view); 
    result=(TextView)findViewById(R.id.textView1); 
    this.setDefaultKeyMode(Activity.DEFAULT_KEYS_SEARCH_LOCAL); 

    final Intent queryIntent = getIntent(); 
    final String queryAction = queryIntent.getAction(); 

    if(Intent.ACTION_SEARCH.equals(queryAction)) 
    { 
     this.doSearchQuery(queryIntent); 
    } 
    else if (Intent.ACTION_VIEW.equals(queryAction)) 
    { 
     this.doView(queryIntent); 
    } 
    else 
    { 
     Log.d("Intent", "Create intent NOT from search"); 
    } 


} 

@Override 
public void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 
    final String queryAction = intent.getAction(); 
    if (Intent.ACTION_SEARCH.equals(queryAction)) 
    { 
     this.doSearchQuery(intent); 
    } 
    else if (Intent.ACTION_VIEW.equals(queryAction)) 
    { 
     this.doView(intent); 
    } 
} 
public void doSearchQuery(Intent intent) 
{ 
    String queryString = intent.getDataString(); // from suggestions 
     if (queryString == null) 
     { 
      queryString = intent.getStringExtra(SearchManager.QUERY); 
       // from search-bar 
     } 

     finish(); 
} 
public void doView(Intent intent) 
{ 
     Log.e("action view"," suggestion "); 

} 


} 

,並在清單:

<activity android:name=".SearchActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <meta-data android:name="android.app.searchable" 
       android:resource="@xml/searchable" /> 
    </activity> 

你需要把搜索配置文件 'searchable.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="Search" 
    android:searchMode="showSearchLabelAsBadge" 
    android:searchSettingsDescription="Custom Suggestions" 
    android:queryAfterZeroResults="false" 
    android:searchSuggestAuthority="com.example.customsearch.CustomSearchSuggestion" 
    android:searchSuggestSelection=" ? " 
    android:searchSuggestIntentAction="android.intent.action.VIEW" 
    android:voiceSearchMode="showVoiceSearchButton" 

    > 
    </searchable> 

併爲客戶提供定製的搜索建議,你需要創建延伸的ContentProvider或SearchRecentSuggestionsProvider類。欲瞭解更多詳細看here

而且其中包含搜索查看活動,您需要設置搜索的信息爲:

SearchManager searchManager=(SearchManager)getSystemService(Context.SEARCH_SERVICE); 

searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

希望這可以幫助你,祝你好運!