ActionBar SearchView未在横向模式下完全展开

问题描述:

当使用操作栏搜索界面时,窗口小部件将展开以在纵向模式下占据屏幕的全部宽度,但在横向模式下停止缩短。ActionBar SearchView未在横向模式下完全展开

有没有办法在SearchView上设置扩展布局参数,以便在用户输入搜索时完全填充操作栏?

见图片: http://i.imgur.com/3z8ZbJA.png

注:我不是目前使用的ActionBar福尔摩斯

编辑: 这里就是我做得到它来扩展全宽。

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; 
     } 
    } 

}); 

你试过类似的东西吗?

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

关闭。我最终需要使用'setOnSearchClickListener()',因为我不打算进行硬件按键搜索。 – 2013-04-07 22:43:23

我想出了一个解决方案,用于在景观中完全扩展搜索视图,并且在创建活动时还具有已扩展的操作视图。这里它是如何工作的:

1.首先在res菜单文件夹中创建一个xml文件,例如:searchview_in_menu.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创建简称布局以上(“@ layout/searchview_layout”)在res-layout文件夹中。新的布局:searchview_layout.xml看起来就像这样:

<?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 。在您的MainActivity类别或在具有实施在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; 
} 

调整宽度布局参数去MATCH_PARENT,这样的SearchView将全面展开或纵向或横向

ViewGroup.LayoutParams layoutParams = mSearchView.getLayoutParams(); 
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; 

对于ActionBarCompat使用:

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

这在ActionBar中实现的顺利程度如何? – Darklex 2014-10-22 21:23:28

使用此(100%):

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

MenuItemCompat的搜索查看有一个名为maxWidth属性。

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

使用的屏幕宽度,而不是XXX offcourse

+6

searchView.setMaxWidth(Integer.MAX_VALUE); – 2016-03-01 08:01:26