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

时间:2016-04-28 01:51:58

标签: android android-layout android-actionbar android-toolbar

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

组成
  1. 最左边的ImageButton“导航抽屉”

  2. TextView标题栏的标题

  3. 最右侧的菜单项

  4. 我正在尝试:

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

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

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

2 个答案:

答案 0 :(得分:6)

  1. 将标题设置为"",所以基本上标题不会占用任何空间。
  2. 为此,您不需要将标题设置为""只需致电

    getSupportActionBar().setDisplayShowTitleEnabled(false);
    
    1. 在"导航抽屉"之间添加元素X(例如,某种文本输入/搜索框)。和现有的菜单项,使这个元素占用1到3之间的空间。
    2. 为此你需要编辑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>
      

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

      @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;
      }
      

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

答案 1 :(得分:2)

您是否尝试在菜单项中添加SearchView

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

      <item android:id="@+id/action_search"
            android:title="Search"
            app:actionViewClass="android.support.v7.widget.SearchView"
            app:showAsAction="always"/>

      <!-- other menu items -->
</menu>

然后在您的活动中使用setIconifiedByDefault()为false,以便始终显示搜索字段:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.search_menu, menu);
    final MenuItem item = menu.findItem(R.id.action_search);
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
    searchView.setIconifiedByDefault(false);
    return true;
 }