2015-08-16 74 views
0

我想在我的活动的ActionBar内显示SearchView。我跟着Android开发者指南在这里here 但是没有SearchView显示,我不明白为什么。 在这里有我的活动在ActionBar中显示SearchView Android

public class SearchActivity extends ActionBarActivity { 


    private String query; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     FacebookSdk.sdkInitialize(getApplicationContext()); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.search_activity_layout); 


     Intent intent = getIntent(); 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      this.query = intent.getStringExtra(SearchManager.QUERY); 
      Toast.makeText(this,query, Toast.LENGTH_LONG); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.options_menu, menu); 

     return true; 
    } 

} 

这里的代码在serachable.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="@string/search_hint" /> 

这里存在options_menu.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/search" 
     android:title="@string/search_title" 
     android:icon="@drawable/ic_action_search" 
     android:showAsAction="collapseActionView|ifRoom" 
     android:actionViewClass="android.widget.SearchView" /> 
</menu> 

,这是明显的

<activity android:name=".SearchActivity" 
       android:label="SearchActivity"> 

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


    </activity> 

唯一奇怪的是,options_menu.xml文件中的这一行(android:showAsAction="collapseActionView|ifRoom")以红色突出显示。

回答

3

尝试把这个在您的options_menu.xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item android:id="@+id/search" 
     android:title="@string/search_title" 
     android:icon="@drawable/ic_action_search" 
     app:actionViewClass="android.widget.SearchView" 
     app:showAsAction="collapseActionView|ifRoom" /> 
</menu> 

这在你的AndroidManifest.xml

<activity android:name=".SearchActivity" 
    android:label="SearchActivity"> 

    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 

    <meta-data android:name="android.app.searchable" 
     android:resource="@xml/searchable"/> 

    <meta-data android:name="android.app.default_searchable" 
     android:value=".SearchActivity" /> 
</activity> 

这在SearchActivity.java

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options_menu, menu); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); 

    return true; 
} 

@Override 
protected void onNewIntent(Intent intent) { 
    setIntent(intent); 

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     Log.e("query", intent.getStringExtra(SearchManager.QUERY)); 
    } 
} 
+0

现在,我可以看到图标,但是当我点击它没有任何反应,没有输入的文本出现了(为了使查询)和键盘没有打开 – FF91

+0

@ FF91我已经添加代码,采取再看看 –

+0

谢谢,我注意到了,但是如果我在添加的onCreateOptionsMenu方法应用程序中添加了四行,则会在第三行添加nullpointerexception。 (我也在清单中添加了元数据) – FF91

0

为了您的参考,希望这有助于!

menu_main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/search" 
    android:title="@string/search_title" 
    android:icon="@drawable/ic_search" 
    android:showAsAction="collapseActionView|ifRoom" 
    android:actionViewClass="android.widget.SearchView" /> 

\ RES \ XML \ searchable.xml:

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

的AndroidManifest.xml:

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

MainActivity.java:

package com.example.searchview; 

import android.app.Activity; 
import android.app.SearchManager; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.SearchView; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = 
      (SearchView) menu.findItem(R.id.search).getActionView(); 
    searchView.setSearchableInfo(
      searchManager.getSearchableInfo(getComponentName())); 


    return true; 
} 

... 
} 
0

试试下面的代码

menu_search.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" tools:context=".SearchActivity"> 
    <item android:id="@+id/search" 
     android:title="Search" 
     android:icon="@android:drawable/ic_menu_search" 
     android:showAsAction="collapseActionView|ifRoom" 
     android:actionViewClass="android.widget.SearchView" /> 
</menu> 

我认为你正在在上面的代码错误。 你使用的是appcompat库吗? 如果不是,上面的代码应该工作。 如果是,请尝试使用app:showAsAction代替android:showAsActionapp:actionViewClass="android.support.v7.widget.SearchView"代替android:actionViewClass="android.widget.SearchView"

清单

<activity 
     android:name=".SearchActivity" 
     android:label="SearchActivity"> 

     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.app.default_searchable" 
      android:value=".SearchActivity" /> 

     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 

    </activity> 

SearchActivity的。java的

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_search, menu); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    return true; 
} 

    @Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    System.out.println("onNewIntent SearchResults"); 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     System.out.println("Received query: " + query); 
    } 
}