Android - SearchView的延迟扩展
问题描述:
我想延迟SearchView的扩展。我使用drawerlayout。如果当抽屉打开时点击搜索项目,那么我的视图布局会变形(灾难),所以我想先关闭抽屉,然后再展开搜索视图。任何想法如何实现这一目标?Android - SearchView的延迟扩展
我使用下面的代码。我试图拦截menuitem选择的事件,触发抽屉关闭。在DrawerListener中,调用serchMenu.expandActionView();
我希望searchView在抽屉完成关闭后展开,但这两个动作总是同时发生,并且在过渡期间,我的视图布局也变得非常扭曲。那为什么我延迟搜索事件的扩大。
public boolean onOptionsItemSelected(MenuItem item) {
SearchView searchView = (SearchView) mSearchItem.getActionView();
if(item.getItemId() == R.id.search){
mDarwerLayout.closeDrawer(mLeftDrawer);
mSearchViewShouldExpand = true;
}
return true;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drawer_layout);
.......
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDarwerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */
0,
0
){
/** Called when a drawer has settled in a completely closed state. */
@Override
public void onDrawerClosed(View drawerView) {
if(mSearchViewShouldExpand){
mSearchItem.expandActionView();
mSearchViewShouldExpand = false;
}
}
};
// Set the drawer toggle as the DrawerListener
mDarwerLayout.setDrawerListener(mDrawerToggle);
}
答
我发现拦截扩展事件的方式,它在MenuItem.OnActionExpandListener中。只需在此方法中返回false
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
Log.d("*******","onMenuItemActionExpand");
mDarwerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
if(mDarwerLayout.isDrawerOpen(mRightDrawer) || mDarwerLayout.isDrawerOpen(mLeftDrawer)) {
mDarwerLayout.closeDrawer(mRightDrawer);
mDarwerLayout.closeDrawer(mLeftDrawer);
mSearchViewShouldExpand = true;
return false;
}
return true;
}