【问题标题】:Remove icon/title for actionbar with expanded SearchView?使用扩展的 SearchView 删除操作栏的图标/标题?
【发布时间】:2013-09-19 08:31:21
【问题描述】:

我创建了一个新项目,目标是 api 11 及更高版本。我有一个活动,我希望默认展开 SearchView:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    inflater.inflate(R.menu.menu_search, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search); 
    mSearchView = (SearchView) searchItem.getActionView();
    mSearchView.setIconifiedByDefault(false);
}

可行,但我不希望操作栏上有任何图标或标题,只是搜索视图。我尝试通过以下方式摆脱我的标题和图标:

getActionBar().setDisplayHomeAsUpEnabled(false);
getActionBar().setDisplayShowTitleEnabled(false);
getActionBar().setIcon(android.R.color.transparent);

但我的操作栏仍然在搜索视图的左侧有这个填充:

有没有办法摆脱它?

谢谢

-------- 编辑 --------

这是我的完整活动:

public class GreatAndroid extends FragmentActivity {
    private SearchView mSearchView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getActionBar().setDisplayShowHomeEnabled(false);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        getMenuInflater().inflate(R.menu.menu_search, menu);
        MenuItem mi = menu.findItem(R.id.action_search);
        mSearchView = (SearchView) mi.getActionView();
        mSearchView.setIconifiedByDefault(false);

        return true;
    }
}

这里是菜单 xml:

<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:showAsAction="always"
      android:actionViewClass="android.widget.SearchView" />
</menu>

【问题讨论】:

    标签: android


    【解决方案1】:

    即使图标是透明的,它仍然会占用空间:

    getActionBar().setIcon(android.R.color.transparent);
    

    删除此行并添加:

    getActionBar().setDisplayShowHomeEnabled(false);
    

    现在,您应该让 SearchView 占用所有可用空间。

    可折叠的操作项具有最大宽度。我能想到的唯一解决方法如下:

    public class GreatAndroid extends FragmentActivity {
        private SearchView mSearchView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            getActionBar().setDisplayShowHomeEnabled(false);
            getActionBar().setDisplayShowTitleEnabled(false);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
    
            getMenuInflater().inflate(R.menu.menu_search, menu);
            MenuItem mi = menu.findItem(R.id.action_search);
            mSearchView = (SearchView) mi.getActionView();
            mSearchView.setIconifiedByDefault(false);
    
            // You can use Display.getSize(Point) from API 13 onwards.
            // For API 11 and 12, use Display.getWidth()
    
            final Point p = new Point();
    
            getWindowManager().getDefaultDisplay().getSize(p);
    
            // Create LayoutParams with width set to screen's width
            LayoutParams params = new LayoutParams(p.x, LayoutParams.MATCH_PARENT);
    
            mSearchView.setLayoutParams(params);
    
            return true;
        }
    }
    

    虽然看起来左边还有空间,但您可以使用mSearchView.setBackgroundColor(Color.RED); 来查看确实没有。

    【讨论】:

    • 是的,我应该提到,我尝试了这 3 行的所有组合,空间仍然存在。
    • 肯定有其他事情发生了,空间还在被占用中。
    • @user291701 为我的答案添加了解决方法。看看有没有帮助。
    • 太棒了,当我最后看到它使用全宽时,我几乎哭了。谢谢!
    • 如果您不想修改 LayoutParams 或图标需要图标化 (mSearchView.setIconifiedByDefault(true);),可以使用:mSearchView.setMaxWidth(p.x);
    【解决方案2】:

    关于左填充,您可以尝试使用collapseActionView

    这是一个示例菜单:

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="@string/search_hint"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom|collapseActionView" />
    </menu>
    

    【讨论】:

    • 我喜欢这个解决方案,虽然它并不能真正解决 OP 的问题。
    【解决方案3】:

    我无法让@Vikram 的遮阳篷工作,但我从 Stack Overflow 找到了另一个答案:

    打开您的 styles.xml 文件并在您的操作栏样式中添加以下代码

    <item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
    <item name="displayOptions">showHome|homeAsUp|showTitle</item>
    <item name="android:icon">@android:color/transparent</item> <--this do the magic!
    

    p/s:我正在使用 Actionbar Sherlock,效果很好

    (见Remove icon/logo from action bar on android工作)

    【讨论】:

      猜你喜欢
      • 2014-06-16
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2014-05-20
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多