动作栏中的中心SearchView

Why*_*rrh 14 android android-actionbar searchview

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

如Google图书应用中所示:

  Google图书应用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" />
Run Code Online (Sandbox Code Playgroud)

我的Action Bar 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>
Run Code Online (Sandbox Code Playgroud)

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

Gun*_*son 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

在哪里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>
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

注意iconifiedByDefault设置属性falseSearchView,这迫使它出现扩大,不只是作为一个图标.这可能要求您以编程方式隐藏软键盘,或者在活动开始时将其打开.

  • 根据我的回答中的布局,如果你从iconifiedByDefault = true开始,然后点击图标,它将在ActionBar中居中.但我不知道你希望非扩展图标的起始位置在哪里.试试这个例子,将iconifiedByDefault设置为true,看看它是否是你想要的.如果没有,例如,如果您想要最右边的图标开始,然后在展开时移动中心点击,则必须侦听click事件并从alignParentRight动态设置自定义布局的布局参数to centerInParent. (2认同)