动作栏中的中心SearchView

时间:2012-12-07 08:03:02

标签: android android-actionbar searchview

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

如Google图书应用中所示:

Google Books app SearchView http://i46.tinypic.com/2z909is.png

我当前的布局设置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>

有没有办法模仿图书的SearchView的行为?

2 个答案:

答案 0 :(得分:17)

据我所知,View中的ActionBar无法实现以Action Items为中心的xml menu。但是,可以通过将自定义布局设置为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

请注意iconifiedByDefault上的false属性设置为SearchView,迫使其展开展开,而不仅仅是图标。这可能要求您hide the softkeyboard programmatically或在活动开始时将其启动。

答案 1 :(得分:-1)

看看here。你可以使用android:actionViewClass =&#34; android.widget.SearchView&#34;属性,这应该工作得很好(请记住,您可以在Java中获取对searchView的引用,并在那里更改提示,如果这是您想要的)。