2015-07-13 49 views
0

我搜索了一個解決方案,並嘗試了其他問題的許多解決方案,但我沒有找到任何工作。 我想讓我的SearchView顯示在我的ActionBar中。但它只在溢出菜單(三個點)中顯示。有人可能會告訴我我的錯誤/解決方案。安卓搜索在ActionBar

我menu_searchview.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item android:id="@+id/action_search" 
    android:icon="@drawable/ic_magnify_white_24dp" 
    android:title="Search" 
    app:showAsAction="always" 
    android:actionViewClass="android.widget.SearchView"/> 
</menu> 

我的活動:

import android.app.Activity; 
import android.support.v4.view.MenuItemCompat; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.SearchView; 
import de.trainer.R; 

public class SearchCategoryActivity extends Activity { 

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

    @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_searchview, menu); 

     MenuItem searchItem = menu.findItem(R.id.action_search); 
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

回答

0

這項工作對我罰款:

菜單文件:

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

    <item 
      android:id="@+id/menu_search" 
      app:actionLayout="@layout/search_view" 
      android:orderInCategory="0" 
      app:showAsAction="always|collapseActionView" 
      android:icon="@drawable/ic_action_search" 
      android:title="Buscar"/> 

</menu> 

佈局/ search_view:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:padding="4dp" 
       android:layout_height="wrap_content"> 

    <EditText 
      android:id="@+id/etSearch" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:cursorVisible="true" 
      android:imeOptions="actionDone" 
      android:inputType="text" 
      android:textColor="@android:color/white" 
      android:textCursorDrawable="@null"/> 

</RelativeLayout> 

在你的活動:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     try { 
      menu.clear(); 
      inflater.inflate(R.menu.your_menu, menu); 

      RelativeLayout actionView = (RelativeLayout) menu.findItem(R.id.menu_search).getActionView(); 
      final EditText editText = (EditText) actionView.findViewById(R.id.etSearch); 
      //final EditText editText = (EditText) menu.findItem(R.id.menu_search).getActionView(); 
      editText.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       } 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 
        if (null != activityAdapter) { 
         activityAdapter.getFilter().filter(s); 
        } 
       } 

       @Override 
       public void afterTextChanged(Editable s) { 

       } 
      }); 

      MenuItem menuItem = menu.findItem(R.id.menu_search); 
      MenuItemCompat.setOnActionExpandListener(menuItem, new MenuItemCompat.OnActionExpandListener() { 
       @Override 
       public boolean onMenuItemActionExpand(MenuItem item) { 
        editText.requestFocus(); 

        ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 
        return true; // Return true to expand action view 
       } 

       @Override 
       public boolean onMenuItemActionCollapse(MenuItem item) { 
        // Do something when collapsed 

        // Borramos el texto que había escrito. 
        editText.setText(""); 

        return true; // Return true to collapse action view 
       } 
      }); 
     } catch (Exception ex) { 
      logManager.error("OCOM - Exception: " + ex.toString()); 
     } 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

最後,在你的適配器,你應該實現的可篩選interfaz。

希望它可以幫助你!與 應用actionViewClass = 「android.widget.SearchView」 :

+0

謝謝你的答案,但它仍保持顯示溢出菜單:( –

0

更換機器人actionViewClass = 「android.support.v7.widget.SearchView」

+0

謝謝您的回答,但它仍保持顯示出來的溢出菜單 –

0

嘗試

應用:actionViewClass =「機器人.widget.SearchView」

應用程式:actionViewClass = 「android.support.v7.widget.SearchView」

代替

機器人:actionViewClass = 「android.widget.SearchView」

還必須刪除

機器人:圖標= 「@繪製/ ic_magnify_white_24dp」 並更改以下方法

@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_searchview, menu); 

      MenuItem searchItem = menu.findItem(R.id.action_search); 
      SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
      searchView.setIconifiedByDefault(false); 
      return true; 
     } 

我希望它能解決您的問題。

+0

嘿,感謝您的回答但它沒有改變任何東西,它是如此的令人沮喪...預覽總是告訴我它應該如何,但在模擬器中它是不同的 –

+0

請檢查編輯後的變化嘗試改變onCreateOptionsMenu方法 – Rajesh

+0

現在我得到一個NullPointerException setIconifiedByDefault。 –

0

從你的佈局和活動,我知道你沒有使用兼容庫。在這種情況下,我建議你從AXML應用切換到

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 
     <item android:id="@+id/action_search" 
      android:icon="@drawable/ic_magnify_white_24dp" 
      android:title="Search" 
      android:showAsAction="always" 
      android:actionViewClass="android.widget.SearchView"/> 
</menu> 

注意,開關:showAsAction安卓showAsAction

這可能會導致此問題。

乾杯