2014-11-03 65 views
0

我想延迟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); 

} 

回答

0

我发现拦截扩展事件的方式,它在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; 


}