【问题标题】:How to keep expanded SearchView on the right side of ActionBar (while using custom icon)?如何在 ActionBar 的右侧保持展开的 SearchView(使用自定义图标时)?
【发布时间】:2013-11-21 14:10:19
【问题描述】:

我的问题与SearchView wrong alignmentSearchView positions when expanded in ActionBar 密切相关,但那里发布的答案不起作用。

所以,我在Action Bar 中使用了SearchView

<item android:id="@+id/action_search"
    android:icon="@drawable/navi_search"
    android:title="@string/action_search"
    android:showAsAction="ifRoom|collapseActionView"
    android:actionViewClass="android.widget.SearchView"
   />

默认情况下是这样的(右上角,溢出菜单旁边):

问题是,当展开时,我希望 SearchView 保持在右侧,但它却移动到左边缘,靠近主页按钮(应用程序图标)。

我尝试将 showAsAction 更改为其中任何一个 (as suggested here):

android:showAsAction="ifRoom"
android:showAsAction="always"

...这确实在展开时修复了对齐,但是在折叠状态时自定义图标丢失了

此外,&lt;item&gt; 菜单上的 android:layout_alignParentRight="true"android:layout_centerInParent="true" 之类的内容无效。

有什么想法吗?

我的目标是 Android 4.0 及更高版本:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />

【问题讨论】:

    标签: android android-layout android-actionbar android-4.0-ice-cream-sandwich searchview


    【解决方案1】:

    好的,我找到了方法:

    onCreateOptionsMenu(),在标准菜单充气后,设置 ActionBar.LayoutParamsGravity.RIGHT 用于 SearchView 实例:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {        
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_activity_actions, menu);
    
        // ...
    
        // Find the SearchView; make it aligned to right, also in expanded mode:
        MenuItem item = menu.findItem(R.id.action_search);
        SearchView search = (SearchView) item.getActionView();
        search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT));
    }
    

    (在菜单定义XML中,我还是用android:showAsAction="ifRoom|collapseActionView"。)

    现在 SearchView 在右侧打开,在图标所在的位置,自定义图标仍在使用中。

    【讨论】:

    • 有人可能会认为 SearchView 上的 android:gravity="right" 菜单 XML 中的 &lt;item&gt; 也可以实现这一点,但至少在我的测试设备上没有。
    • 是的,它在 Android 4.0+ 上运行良好。这种方法有例外吗?考虑提出一个新问题。
    【解决方案2】:

    尝试编辑这一行

    android:showAsAction="ifRoom|collapseActionView"
    

    到:

    android:showAsAction="ifRoom"
    

    它将编辑文本向右对齐。

    【讨论】:

    • 通过阅读 whole 问题,您会发现我已经尝试过了。 (虽然它修复了对齐方式,但不知何故导致我的自定义图标丢失。)
    【解决方案3】:

    使用它对我有用:

    final SearchView searchView = (SearchView) searchMenuItem.getActionView();
    searchView.setOnSearchClickListener(new View.OnClickListener()
    {
         @Override
         public void onClick(View v)
         {
             searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.END));
         }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 2015-02-05
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      相关资源
      最近更新 更多