14

如何将 ActionView(特别是 SearchView)置于 Action Bar 的中心?

如在 Google 图书应用中所见:

  Google 图书应用 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 的行为?

4

2 回答 2

17

据我所知,在 a中无法实现以aView为中心。但是,它可以通过将自定义布局设置为. 一个基本的例子:ActionBarAction Itemsxml menuActionBar

一个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 英寸平板电脑上创建:

在此处输入图像描述

请注意设置为on的iconifiedByDefault属性,这会强制它显示为展开状态,而不仅仅是图标。这可能需要您以编程方式隐藏软键盘,否则它将在 Activity 启动时打开。falseSearchView

于 2012-12-12T10:08:01.407 回答
-1

看看这里。您可以只使用 android:actionViewClass="android.widget.SearchView" 属性,这应该可以正常工作(请记住,您可以在 Java 中获取对 searchView 的引用,并在此处更改提示,如果这是您想要的)。

于 2012-12-13T17:48:32.857 回答