如何使用 appcompat v7 折叠 SearchView?
How to collapse SearchView on backpressed using appcompat v7.?
我将 appcompat v7
用于带工具栏(操作栏除外)的搜索视图。下面是我的菜单 xml 文件和 java 文件。
菜单文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"/>
<item
android:id="@+id/action_sort"
android:icon="@drawable/ic_action_sort"
android:title="@string/sort"
app:showAsAction="ifRoom"/>
</menu>
java 文件:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.dashboard, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
}
return super.onCreateOptionsMenu(menu);
}
现在我想折叠展开的搜索视图,否则我想在 backpressed()
方法上工作。我怎样才能做到这一点?
在 Class 中尝试这个并在 Class 中扩展 ActionBarActivity
(示例:- public class Home extends ActionBarActivity
)
@Override
public void onBackPressed() {
super.onBackPressed()
}
折叠 SearchView:试试这个,
menu.collapseActionView();
(或)
searchView = menuItem.getActionView().
(或)
searchView.onActionViewCollapsed()
在 onBackPressed
中调用 invalidateOptionsMenu()
或将 SearchView 存储为 Activity
字段并调用 searchView.onActionViewCollapsed();
但这在恢复 Toolbar
状态时可能需要额外的工作(标题状态等)。
在我自己的设置中默认处理在受压时折叠。我没有实现自定义 onBackPressed 方法。除了从 ActionBarActivity 扩展之外,我没有做任何特别的事情。
我使用 MenuItemCompat 获取 actionview,这可能会成功。
这是我的菜单xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.yourapp.youractivity">
<item
android:id="@+id/search"
android:title="@string/app_name"
android:icon="@drawable/nav_search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
这就是我创建菜单的方式
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.shop_list, menu);
SearchManager searchManager =
(SearchManager)getSystemService(Context.SEARCH_SERVICE);
//Using MenuItemCompat here, that can do the trick
searchView =
(SearchView)MenuItemCompat.
getActionView(menu.findItem(R.id.search));
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
//etc...
//etc...
return true;
}
我将 appcompat v7
用于带工具栏(操作栏除外)的搜索视图。下面是我的菜单 xml 文件和 java 文件。
菜单文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"/>
<item
android:id="@+id/action_sort"
android:icon="@drawable/ic_action_sort"
android:title="@string/sort"
app:showAsAction="ifRoom"/>
</menu>
java 文件:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.dashboard, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
}
return super.onCreateOptionsMenu(menu);
}
现在我想折叠展开的搜索视图,否则我想在 backpressed()
方法上工作。我怎样才能做到这一点?
在 Class 中尝试这个并在 Class 中扩展 ActionBarActivity
(示例:- public class Home extends ActionBarActivity
)
@Override
public void onBackPressed() {
super.onBackPressed()
}
折叠 SearchView:试试这个,
menu.collapseActionView();
(或)
searchView = menuItem.getActionView().
(或)
searchView.onActionViewCollapsed()
在 onBackPressed
中调用 invalidateOptionsMenu()
或将 SearchView 存储为 Activity
字段并调用 searchView.onActionViewCollapsed();
但这在恢复 Toolbar
状态时可能需要额外的工作(标题状态等)。
在我自己的设置中默认处理在受压时折叠。我没有实现自定义 onBackPressed 方法。除了从 ActionBarActivity 扩展之外,我没有做任何特别的事情。
我使用 MenuItemCompat 获取 actionview,这可能会成功。
这是我的菜单xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.yourapp.youractivity">
<item
android:id="@+id/search"
android:title="@string/app_name"
android:icon="@drawable/nav_search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
这就是我创建菜单的方式
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.shop_list, menu);
SearchManager searchManager =
(SearchManager)getSystemService(Context.SEARCH_SERVICE);
//Using MenuItemCompat here, that can do the trick
searchView =
(SearchView)MenuItemCompat.
getActionView(menu.findItem(R.id.search));
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
//etc...
//etc...
return true;
}