展开SearchView时如何移除ActionBar上的图标/标题?

11

我创建了一个新项目,目标是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);
}

这段代码可以实现功能,但我不想在ActionBar上显示任何图标或标题,只想要搜索框。我尝试通过以下方式去除我的标题和图标:

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

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

enter image description here

有没有办法去掉它?

谢谢。

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

以下是完整的活动内容:

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>
3个回答

5
即使图标是透明的,它仍然占据空间:
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);可以发现实际上并没有。


是的,我应该提到,我尝试了这三行代码的所有组合,但空格仍然存在。 - user291701
肯定还有其他问题,空间仍然被占用着。 - user291701
@user291701 给我的回答添加了一个解决方法。看看它是否有帮助。 - Vikram
太棒了,当我终于看到它使用全角时,我差点哭了。谢谢! - user291701
1
如果您不想修改LayoutParams或者需要将图标缩小(mSearchView.setIconifiedByDefault(true);),那么可以使用以下方法:mSearchView.setMaxWidth(p.x); - user2880229

4
关于左填充,您可以尝试使用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 的问题。 - saltandpepper

2

我无法让@Vikram的答案起作用,但我在Stack Overflow上找到了另一个答案:

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

<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:我正在使用ActionBarSherlock,这个方法可以完美运行

(参见移除Android上操作栏的图标/标志


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接