2013-04-07 10 views
6

アクションバーの検索インターフェイスを使用すると、ウィジェットは、ポートレートモードでは画面の全幅を占めるように展開されますが、ランドスケープモードでは停止します。ActionBar SearchViewがランドスケープモードで完全に拡張されていません

ユーザーが検索を入力しているときにアクションバーを完全に埋めるようにSearchViewで拡張レイアウトパラメータを設定する方法はありますか?

参照イメージ: http://i.imgur.com/3z8ZbJA.png

注:私は現在、アクションバーシャーロック

編集使用していないよ: は、ここで私はそれが完全な幅を拡張するために取得するためにやったことです。

searchView.setOnSearchClickListener(new OnClickListener() { 
    private boolean extended = false; 

    @Override 
    public void onClick(View v) { 
     if (!extended) { 
      extended = true; 
      LayoutParams lp = v.getLayoutParams(); 
      lp.width = LayoutParams.MATCH_PARENT; 
     } 
    } 

}); 

答えて

4

このようなことを試しましたか?

editView.setOnKeyListener(new OnKeyListener() { 
    private boolean extended = false; 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (!extended && event.getAction() == KeyEvent.ACTION_DOWN) { 
      extended = true; 
      LayoutParams lp = v.getLayoutParams(); 
      lp.width = LayoutParams.MATCH_PARENT; 
     } 

     return false; 
    } 

}); 
+0

閉じるoffcourse

final MenuItem searchItem = menu.findItem(R.id.action_search); final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setMaxWidth(xxx); 

使用画面幅の代わりに、XXX。私は 'setOnSearchClickListener()'を使う必要がありました。なぜなら、私はハードウェアキープレス検索をしないからです。 –

0

検索ビューをランドスケープで完全に展開し、アクティビティが作成されたときにアクションビューが既に展開されているという解決策を見つけました。ここでの動作:

1. resm-menuフォルダに、searchview_in_menu.xmlという名前のxmlファイルを最初に作成します。ここでは、次のコードを持っているでしょう:

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:id="@+id/action_search" 
       android:title="@string/search" 
       android:icon="@android:drawable/ic_menu_search" 
       android:actionLayout="@layout/searchview_layout" /> 
    </menu> 

注: "@文字列/検索は、" - RES-のstrings.xmlに次のようになります。

<string name="search">Search</string> 

2.Secondが呼ばレイアウトを作成しますres-layoutフォルダ内の上記( "@ layout/searchview_layout")新しいレイアウト:

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

注:ここでは、その親(アンドロイド:layout_width =「match_parent」)の幅に合わせて、検索ビューの幅を設定している

3 searchview_layout.xmlは次のようになります。あなたのMainActivityクラス.INまたはonCreateOptionsMenu()メソッドに次のコードを検索するビューの書き込みを実装する必要が活動中:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.searchview_in_menu, menu); 
     //find the search view item and inflate it in the menu layout 
     MenuItem searchItem = menu.findItem(R.id.action_search); 
     mSearchView = (SearchView) searchItem.getActionView(); 
     //set a hint on the search view (optional) 
     mSearchView.setQueryHint(getString(R.string.search)); 
     //these flags together with the search view layout expand the search view in the landscape mode 
     searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 
       | MenuItem.SHOW_AS_ACTION_ALWAYS); 
     //expand the search view when entering the activity(optional) 
     searchItem.expandActionView(); 
     return true; 
} 
0

は、MATCH_PARENTSearchViewが完全で拡大するそのように幅レイアウトのparamを調整しますどちらか肖像画や風景

ActionBarCompatはこれを使用するために
ViewGroup.LayoutParams layoutParams = mSearchView.getLayoutParams(); 
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; 
0

MenuItemCompat.setShowAsAction(searchItem, MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW 
      | MenuItem.SHOW_AS_ACTION_ALWAYS); 
    MenuItemCompat.expandActionView(searchItem); 
+0

これはActionBarでどれくらい滑らかですか? – Darklex

0

は、この(100%)を使用します

mSearchView = (SearchView) searchItem.getActionView();  
mSearchView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
12

をMenuItemCompatのSearchViewはmaxWidthにという名前のプロパティを持っています。

+6

searchView.setMaxWidth(Integer.MAX_VALUE); –

関連する問題