2011-11-05 75 views
8

我应该听取什么事件来确定用户何时点击图标化​​。我想从操作栏中删除一些项目(ActionBar导航选项卡,如果这很重要),以纵向方式创建更多空间。当searchview从图标化视图展开时发生的事件

我试过OnClickListener,OnFocusChangeListener,OnTouchListener和其他事件,但都没有通过SearchView扩展触发。

回答

20

由于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 
     } 
    }); 
} 
+1

与往常一样,您可以使用** ActionBarSherlock **('com.actionbarsherlock.view.MenuItem')来实现向后兼容性 –

+3

并且如果使用AppCompat,则有'MenuItemCompat.setOnActionExpandListener' –

13

我找到了一种方法来获取事件中使用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); 
      } 
     } 
    }; 
+0

完美! (尽管你可能想用'v'而不是'_searchView'来传递)......我找不到这个方法,因为这个方法和其他监听器一样,以'add'开始,而不是'set'。 –

+0

需要API级别11,我想在级别8.使用帮助 – vuhung3990

+0

也可以实现成searchView.addOnLayoutChangeListener(); – Maga

5

如果您使用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; 
    } 
}); 
相关问题