我应该听取什么事件来确定用户何时点击图标化。我想从操作栏中删除一些项目(ActionBar导航选项卡,如果这很重要),以纵向方式创建更多空间。当searchview从图标化视图展开时发生的事件
我试过OnClickListener,OnFocusChangeListener,OnTouchListener和其他事件,但都没有通过SearchView扩展触发。
我应该听取什么事件来确定用户何时点击图标化。我想从操作栏中删除一些项目(ActionBar导航选项卡,如果这很重要),以纵向方式创建更多空间。当searchview从图标化视图展开时发生的事件
我试过OnClickListener,OnFocusChangeListener,OnTouchListener和其他事件,但都没有通过SearchView扩展触发。
由于API等级14,你有一个专门的监听器: http://developer.android.com/guide/topics/ui/actionbar.html
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options, menu);
MenuItem menuItem = menu.findItem(R.id.actionItem);
...
menuItem.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when collapsed
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
return true; // Return true to expand action view
}
});
}
我找到了一种方法来获取事件中使用addOnLayoutChangeListener
private final OnLayoutChangeListener _searchExpandHandler = new OnLayoutChangeListener()
{
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight,
int oldBottom)
{
SearchView searchView = (SearchView)v;
if (searchView.isIconfiedByDefault() && !searchView.isIconified())
{
// search got expanded from icon to search box, hide tabs to make space
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
}
}
};
完美! (尽管你可能想用'v'而不是'_searchView'来传递)......我找不到这个方法,因为这个方法和其他监听器一样,以'add'开始,而不是'set'。 –
需要API级别11,我想在级别8.使用帮助 – vuhung3990
也可以实现成searchView.addOnLayoutChangeListener(); – Maga
如果您使用MenuItemCompat
:
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
Log.d("TAG", "Collapsed");
return true;
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
Log.d("TAG", "Expanded");
return true;
}
});
与往常一样,您可以使用** ActionBarSherlock **('com.actionbarsherlock.view.MenuItem')来实现向后兼容性 –
并且如果使用AppCompat,则有'MenuItemCompat.setOnActionExpandListener' –