android - 使用扩展的 SearchView 删除操作栏的图标/标题?

标签 android

我创建了一个新项目,目标是 api 11 及更高版本。我有一个 Activity ,我希望默认展开 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);
}

这有效,但我不希望操作栏上有任何图标或标题,只需要搜索 View 。我尝试通过以下方式摆脱我的标题和图标:

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

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

enter image description here

有没有办法摆脱它?

谢谢

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

这是我的完整 Activity :

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>

最佳答案

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

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); 来查看实际上没有。

关于android - 使用扩展的 SearchView 删除操作栏的图标/标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18806877/

相关文章:

android - 频繁更新 SQLite DB 和 Listview(效率)

Android ListView如何获取空 View 事件

android - 如何在扩展 LifecycleActivity 的 View 中设置SupportActionBar

java - Stringbuffer 不可达语句

android - 我如何从 styles.xml 设置 RelativeLayout 的样式 - Android

android - 如何在 Android 中使用 Robotium 为主屏幕 Activity 编写测试用例

java - 你能 "doublesign"android apk 文件吗?

Android YouTube 集成,删除 YouTube Logo

android - 在 Android 上使用 OpenGL ES 2.0 中的着色器程序绘制轮廓

java - Activity 开始时加载 fragment