2013-08-05 66 views
23

我有一個工作的SearchView,它在用戶點擊搜索圖標時在我的OptionsMenu中展開。但它只在其他OptionsMenu圖標中的可用空間內擴展。在寬屏幕上,這很好,但空間狹窄,搜索框中只能顯示5-10個字符。我希望它覆蓋其他圖標,例如它適用於Android通訊錄應用程序。目前,我正在構建targetSdkVersion = 17。希望我錯過了一些簡單的東西:)SearchView中的選項菜單不全寬

(注意稍後添加:目前唯一可行的解​​決方案是當我想要隱藏所有菜單圖標來擴展搜索圖標,這在概念上很簡單,但是這很麻煩,因爲當恢復隱藏的圖標時,必須通過一堆邏輯來確定要恢復哪些圖標,或者保持狀態變量等等)

這裏是我的項目在XML爲OptionsMenu:

<item 
    android:id="@+id/menu_search_shallow" 
    android:title="Search Current Folder" 
    android:icon="@drawable/ic_btn_search" 
    android:showAsAction="always|collapseActionView" 
    android:actionViewClass="android.widget.SearchView" /> 

我也有我主要活動代碼:

@Override 
public boolean onCreateOptionsMenu (Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.nav_menu, menu); 
    this.optionsMenu = menu; 

    MenuItem searchItem = menu.findItem (R.id.menu_search_shallow); 
    searchItem.setOnActionExpandListener (this); 
    SearchView searchView = (SearchView) searchItem.getActionView(); 
    searchView.setQueryHint (getString (R.string.search_shallow_hint)); 

    searchItem = menu.findItem (R.id.menu_search_deep); 
    searchItem.setOnActionExpandListener (this); 
    searchView = (SearchView) searchItem.getActionView(); 
    searchView.setQueryHint (getString (R.string.search_deep_hint)); 
} 

@Override 
public boolean onMenuItemActionExpand(MenuItem item) 
{ 
    SearchView searchView = (SearchView) item.getActionView(); 
    searchView.setOnQueryTextListener (this); 
    return true; 
} 

@Override 
public boolean onMenuItemActionCollapse(MenuItem item) 
{ 
    SearchView searchView = (SearchView) item.getActionView(); 
    searchView.setQuery ("", false); 
    return true; 
} 

回答

3

我也有類似的問題,即搜索欄沒有填寫的整個寬度,(但我沒有別的圖標)。 我解決它通過在項目中加入:

android:actionLayout="@layout/my_search_view" 

,並在佈局/ my_search_view.xml:

<?xml version="1.0" encoding="utf-8"?> 
<SearchView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
+0

這聽起來很合理。我現在不打算改變工作代碼,但是我認爲這個答案是正確的,假設你是正確的! –

+1

不起作用,只設置MaxWidth = 10000將跨越視圖,但隱藏其他項目 – Hiep

14

出於某種原因jjung的解決方案,我沒有工作。我不得不添加android:maxWidth="10000dp",只是一個非常高的最大寬度,讓它擴大到全部可用寬度。

另外,我想補充,我使用的支持庫(V7),所以我的佈局文件看起來是這樣的:

<android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:maxWidth="10000dp" /> 

而在我的項目,我有:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res-auto"> 
    <item 
     ... 
     myapp:actionLayout="@layout/searchview" /> 
... 

其中myapp只是支持庫添加的屬性的一些任意名稱空間(有關更多詳細信息,請參閱Adding Action Items)。

+0

您是否設法解決這個問題? – Jumpa

+0

偉大的這個解決方案也爲我工作。這個10000是一個任意數字嗎? – ThanosFisherman

+1

這個解決方案適用於我,只有我使用'SearchView' XML元素而不是支持小部件。我認爲這應該被標記爲正確的解決方案。 – qefzec

90

而不是創建一個新的佈局我在onCreateOptionsMenu設置maxWidth編程()的:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_search, menu); 
    SearchView searchView = (SearchView)menu.findItem(R.id.menu_search).getActionView(); 
    searchView.setMaxWidth(Integer.MAX_VALUE); 
    .... 
+3

searchView.setMaxWidth(Integer.MAX_VALUE);解決了這個問題。 –

+2

安卓N顯示正確(可能是屏幕寬度),但Nexus 6(棉花糖)展示此問題。此解決方案適用於Nexus 6,而其他方案不適用 – behelit

+0

searchView.setMaxWidth(Integer.MAX_VALUE);解決了問題 –

1

有這麼多的方法來解決這個問題 - 我只添加我在幾所使用的應用。

我有我的自定義搜索查看(與其他一些定製)延伸android.support.v7.widget.SearchView,並以伸展到全寬:

@Override 
public void setLayoutParams(final ViewGroup.LayoutParams params) { 
    params.width = ViewGroup.LayoutParams.MATCH_PARENT; 
    super.setLayoutParams(params); 
} 
+1

我在Android模擬器中嘗試了類似的解決方案,但它不起作用。但是'searchView.setMaxWidth(Integer.MAX_VALUE);'做了。 – CoolMind

1

也許我遲到了但認爲這可能對面臨與我相同問題的人有所幫助。

final SearchView searchView = (SearchView) myActionMenuItem.getActionView(); 
searchView.setMaxWidth(Integer.MAX_VALUE);//set search menu as full width 

在類的onCreateOptionsMenu 可以解決這個問題,但我們需要有一點了解。 如果您只想顯示搜索菜單​​(單擊搜索按鈕時)而不是操作欄中的任何其他菜單項,則需要將搜索項保留爲菜單文件中的第一項。下面是一個例子

 <?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"> 

<!--keeping searach as first item--> 
     <item 
      android:id="@+id/action_search" 
      android:icon="@drawable/search_ab" 
      android:title="@string/search" 
      app:actionViewClass="android.support.v7.widget.SearchView" 
      app:showAsAction="ifRoom" /> 

     <item 
      android:id="@+id/itemFilter" 
      android:icon="@drawable/filter" 
      android:title="@string/filter" 
      app:showAsAction="ifRoom" /> 
    </menu> 

它會顯示爲 enter image description here

上點擊搜索將顯示爲全寬

enter image description here

如果你繼續搜索作爲第二或菜單中的最後一項然後它會顯示像這樣。

enter image description here

和點擊搜索enter image description here