在android的标题栏中添加搜索框/文本字段

hix*_*hix 2 android android-layout android-actionbar android-toolbar

在我的应用程序的一个活动中,我使用android.support.v7.widget.Toolbar作为标题栏.默认情况下,标题栏布局包含

  1. ImageButton"导航抽屉"在最左边

  2. TextView标题栏的标题

  3. 最右边的菜单项

我正在尝试:

  • 将标题设置为"",所以基本上标题不会占用任何空间

  • 在"导航抽屉"和现有菜单项之间添加元素X(例如,某种文本输入/搜索框),使得该元素将占用1到3之间的全部空间.

我尝试将X添加到菜单项,但我无法将其宽度设置为标题栏中的剩余空间.我想我可能不得不手动修改标题栏布局而不是将X添加到菜单项.尽管如此,我仍然不知道如何让这个元素自动占用1到3之间的剩余空间.你有什么建议吗?谢谢.

Pra*_*hra 6

  1. 将标题设置为"",所以基本上标题不会占用任何空间.

为此,您无需将标题设置为""即可调用

getSupportActionBar().setDisplayShowTitleEnabled(false);
Run Code Online (Sandbox Code Playgroud)
  1. 在"导航抽屉"和现有菜单项之间添加元素X(例如,某种文本输入/搜索框),使得该元素将占用1到3之间的全部空间.

为此,您需要编辑menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".ui.activities.UserListActivity">
<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never" />
<item
    android:id="@+id/menu_search"
    android:title="@string/menu_search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always"
    android:icon="@android:drawable/ic_search_category_default"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

在活动中你必须编写代码: -

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_user_list, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {
            //TODO write your code what you want to perform on search                
            return true;
        }
        @Override
        public boolean onQueryTextChange(String query) {
            //TODO write your code what you want to perform on search text change                
            return true;
        }
    });
    return true;
}
Run Code Online (Sandbox Code Playgroud)

你不需要手动添加X图标它由android本身处理.单击搜索图标后,它将打开带有标题上交叉图标的编辑文本,一旦您点击十字标题,将自动缩小.