将搜索框/文本字段添加到 android 的 header 栏
adding a search box / text field to android's header bar
在我的一个 activity 应用程序中,我使用 android.support.v7.widget.Toolbar 作为 header 栏。默认情况下,header 栏布局包含
ImageButton "navigation drawer" 在最左边
TextView header 栏的标题
最右边的菜单项
我正在尝试做:
将标题设置为“”,这样标题基本上不会占用任何space
在 "navigation drawer" 和现有菜单项之间添加一个元素 X(例如,某种文本输入/搜索框),这样该元素将在 1 之间占据 space和 3.
我尝试将 X 添加到菜单项,但无法将其宽度设置为 header 栏中剩余的 space。我想我可能必须手动修改 header 栏布局,而不是将 X 添加到菜单项。尽管如此,我仍然不知道如何让这个元素自动占据 1 到 3 之间的全部剩余 space。你有什么建议吗?谢谢
您是否尝试过在菜单项中添加 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>
然后在您的 activity 中将 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;
}
- 将标题设置为“”,所以基本上标题不会占用任何space。
为此,您无需将标题设置为“”,只需调用
getSupportActionBar().setDisplayShowTitleEnabled(false);
- 在 "navigation drawer" 和现有菜单项之间添加一个元素 X(例如,某种文本输入/搜索框),这样该元素将在 1 和 3 之间占据完整的 space。
为此您需要编辑 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>
并且在 activity 中你必须编写代码:-
@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 自行处理。单击搜索图标后,它会打开 header 上带有十字图标的编辑文本,单击十字后,header 将自动缩小。
在我的一个 activity 应用程序中,我使用 android.support.v7.widget.Toolbar 作为 header 栏。默认情况下,header 栏布局包含
ImageButton "navigation drawer" 在最左边
TextView header 栏的标题
最右边的菜单项
我正在尝试做:
将标题设置为“”,这样标题基本上不会占用任何space
在 "navigation drawer" 和现有菜单项之间添加一个元素 X(例如,某种文本输入/搜索框),这样该元素将在 1 之间占据 space和 3.
我尝试将 X 添加到菜单项,但无法将其宽度设置为 header 栏中剩余的 space。我想我可能必须手动修改 header 栏布局,而不是将 X 添加到菜单项。尽管如此,我仍然不知道如何让这个元素自动占据 1 到 3 之间的全部剩余 space。你有什么建议吗?谢谢
您是否尝试过在菜单项中添加 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>
然后在您的 activity 中将 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;
}
- 将标题设置为“”,所以基本上标题不会占用任何space。
为此,您无需将标题设置为“”,只需调用
getSupportActionBar().setDisplayShowTitleEnabled(false);
- 在 "navigation drawer" 和现有菜单项之间添加一个元素 X(例如,某种文本输入/搜索框),这样该元素将在 1 和 3 之间占据完整的 space。
为此您需要编辑 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>
并且在 activity 中你必须编写代码:-
@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 自行处理。单击搜索图标后,它会打开 header 上带有十字图标的编辑文本,单击十字后,header 将自动缩小。