【问题标题】:ActionBar SearchView not fully expanding in landscape modeActionBar SearchView 在横向模式下未完全展开
【发布时间】:2013-03-29 20:54:23
【问题描述】:

在使用操作栏搜索界面时,小部件在纵向模式下会展开以占据屏幕的整个宽度,但在横向模式下会停止。

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

看图:

注意:我目前没有使用 ActionBar Sherlock

编辑: 这是我为使其扩展整个宽度所做的工作。

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

});

【问题讨论】:

    标签: android search android-actionbar searchview


    【解决方案1】:

    MenuItemCompat 的 SearchView 有一个名为 maxWidth 的属性。

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

    使用屏幕宽度代替 xxx offcourse

    【讨论】:

    • searchView.setMaxWidth( Integer.MAX_VALUE );
    【解决方案2】:

    你尝试过类似的方法吗?

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

    【讨论】:

    • 关闭。我最终需要使用setOnSearchClickListener(),因为我不打算进行硬件按键搜索。
    【解决方案3】:

    我想出了一个解决方案,可以在横向中完全扩展搜索视图,并且在创建活动时也已经扩展了操作视图。它是如何工作的:

    1.首先在您的 res-menu 文件夹中创建一个 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>
    

    注意:“@string/search” - 在 res-strings.xml 中看起来像这样:

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

    2.第二次在 res-layout 文件夹中创建上述布局(“@layout/searchview_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"/>
    

    注意:这里我们将搜索视图的宽度设置为匹配其父级的宽度(android:layout_width="match_parent")

    3.在您的 MainActivity 类或必须实现 Search View 的活动中,在 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;
    }
    

    【讨论】:

      【解决方案4】:

      将宽度布局参数调整为MATCH_PARENT,这样SearchView 将在纵向或横向中完全展开

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

      【讨论】:

        【解决方案5】:

        对于 ActionBarCompat 使用这个:

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

        【讨论】:

        • 在ActionBar中实现的流畅度如何?
        【解决方案6】:

        使用这个(100%):

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-13
          • 2018-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-15
          • 2020-02-07
          • 1970-01-01
          相关资源
          最近更新 更多