2011-11-05 37 views
8

Tôi nên lắng nghe sự kiện nào khi người dùng nhấp vào biểu tượng SearchView. Tôi muốn xóa một số mục (các tab điều hướng ActionBar, nếu điều đó quan trọng) từ thanh tác vụ để tạo thêm không gian theo hướng dọc.Sự kiện khi chế độ xem tìm kiếm mở rộng từ chế độ xem được biểu tượng

Tôi đã thử OnClickListener, OnFocusChangeListener, OnTouchListener và các sự kiện khác nhưng không được kích hoạt bởi việc mở rộng SearchView.

Trả lời

20

Kể từ API Cấp 14 bạn có một người biết lắng nghe chuyên dụng: 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

Như mọi khi, bạn có thể sử dụng ** ActionBarSherlock ** ('com.actionbarsherlock.view.MenuItem') để tương thích ngược –

+3

Và nếu bạn sử dụng AppCompat có' MenuItemCompat.setOnActionExpandListener' –

13

Tôi tìm thấy một cách để có được sự kiện rằng việc sử dụng 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

Hoàn hảo! (Mặc dù bạn có thể muốn sử dụng câu lệnh được chuyển trong 'v' thay vì' _searchView') ... Tôi không thể tìm thấy phương thức này vì phương thức bắt đầu bằng 'add' thay vì' set' như cho các thính giả khác. –

+0

yêu cầu cấp API 11, tôi muốn sử dụng ở cấp độ 8.xin vui lòng giúp – vuhung3990

+0

Cũng có thể thực hiện vào searchView.addOnLayoutChangeListener(); – Maga

5

Nếu bạn đang sử dụng 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; 
    } 
}); 
Các vấn đề liên quan