android - 在操作栏中居中搜索 View

标签 android android-actionbar searchview

如何让 ActionView(尤其是 SearchView)在 Action Bar 中居中?

如 Google 图书应用中所示:

Google Books app SearchView

我当前的布局设置(search_layout.xml):

<?xml version="1.0" encoding="utf-8"?>
<SearchView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:queryHint="@string/search_hint" />

我的操作栏 XML 文件(menu.xml):

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:icon="@+android:drawable/ic_menu_search"
        android:title="@string/search"
        android:showAsAction="always|collapseActionView"
        android:id="@+id/searchMenuItem"
        android:actionLayout="@layout/search_layout" />
</menu>

有没有办法模仿 Books 的 SearchView 的行为?

最佳答案

ActionBar 为中心的 View 无法通过 xml 菜单 中的 Action Items 实现,据我所知。但是,它可以通过为 ActionBar 设置自定义布局来实现。一个基本的例子:

一个 Activity :

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setCustomView(R.layout.actionbar_layout);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

actionbar_layout 是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <SearchView
        android:id="@+id/mySearchView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:iconifiedByDefault="false" />
</RelativeLayout>

在 7 英寸平板电脑上创建:

enter image description here

请注意 SearchView 上的 iconifiedByDefault 属性设置为 false,这会强制它展开显示,而不仅仅是作为一个图标。这可能需要您 hide the softkeyboard programmatically否则它将在 Activity 启动时打开。

关于android - 在操作栏中居中搜索 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13759148/

相关文章:

android - 如何在xml中添加多个框架

android - 网络安全配置导致 React Native 应用程序未连接到 Metro 服务器

java - 使用操作栏从“设置”返回上一屏幕

android - 使用 HoloEveryWhere 单击 ActionBar 上的 SearchView 图标时,如何隐藏子菜单?

android - 操作栏sherlock searchview : setOnQueryTextListener

android - 更改 LayoutParams 后,RelativeLayout 中的按钮消失

android - 玻璃相机预览显示乱码

android - 如何在滚动android时固定我的工具栏

java - 应用程序图标未显示在 Android 操作栏中

android - 在操作栏中设置 android 搜索 View 和下拉列表的样式