2015-05-26 4 views
7

Я пытаюсь добавить SearchView в свою панель инструментов, я добавил значок, но когда я его нажимаю, он не расширяется.Android - SearchView в панели инструментов не расширяется

Вот код:

main_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.app.try.MainActivity"> 
    <item 
     android:id="@+id/search" 
     android:title="@string/search" 
     android:icon="@drawable/abc_ic_search_api_mtrl_alpha" 
     app:showAsAction="always" 
     android:actionViewClass="android.support.v7.widget.SearchView"/> 
</menu> 

MainActivity.java

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

     MenuItem searchItem = menu.findItem(R.id.search); 
     SearchManager searchManager= (SearchManager)getSystemService(Context.SEARCH_SERVICE); 

     SearchView searchView=null; 
     if (searchItem!=null) { 
      Log.d("createOptionMenu","search item not null"); 
      searchView = (SearchView) searchItem.getActionView(); 
     } 

     if (searchView!=null) { 
      Log.d("createOptionMenu","search view not null"); 
      searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     }else{ 
      Log.e("createOptionMenu","search view null"); 
     } 



     return true; 
    } 

(это всегда показывает сообщение журнала "вид поиска нулевой")

AndroidManifest.xml

... 
<activity 
      android:name=".MainActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 

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

     <activity 
     android:name=".SearchResultActivity" 
     android:label="@string/title_activity_search_result" > 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
... 

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="HINTTT" /> 

Я пробовал несколько вариантов, как с помощью expandActionView() или setIconified(false), но не из тех работ, для меня.

+0

Вы импортирование правильного класса. i.e android.support.v7.widget.SearchView в действии? Не включайте android.widget.SearchView в действие, если вы используете appcompat searchVIew. – shubendrak

+0

@Shubendra Я импортировал 'andorid.widget.SearchView' вместо' android.support.v7.widget.SearchView', но я его изменил и все еще не работал – Doruko

ответ

23

Вы должны использовать MenuItemCompat

mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); 

и для разрушения SearchView использовать

MenuItemCompat.collapseActionView(searchItem); 

и убедитесь, что вы изменили android:actionViewClass к app:actionViewClass

+0

Пробовал, все еще не работал, и сообщение журнала показывая, что searchView имеет значение – Doruko

+18

приложение: actionViewClass вместо android: actionViewClass –

+0

вот и все! большое спасибо! – Doruko

-2

В MainActivity вы должны распространяется ActionbarActivity

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:appcompat="http://schemas.android.com/apk/res-auto" 
xmlns:app="http://schemas.android.com/tools"> 

<item 
    android:id="@+id/menu_search" 
    android:title="@string/menu_search" 
    appcompat:actionViewClass="android.support.v7.widget.SearchView" 
    appcompat:showAsAction="always"/> 

MainActivity.java

public class MainActivity extends ActionBarActivity { 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    // Inflate menu to add items to action bar if it is present. 
    inflater.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.menu_search).getActionView(); 
    searchView.setSearchableInfo(
      searchManager.getSearchableInfo(getComponentName())); 

    return true; 
} 

}

1

У меня была такая же проблема. Я просто решил мой, сделав небольшую настройку. изменить android:actionViewClass="android.support.v7.widget.SearchView"

к app:actionViewClass="android.support.v7.widget.SearchView"

Смежные вопросы