2012-02-01 40 views
25

Tôi muốn tự động thay đổi biểu tượng "nhà" trong ActionBar. Điều này có thể dễ dàng thực hiện trong v14 với ActionBar.setIcon (...), nhưng tôi không thể tìm thấy anyway để thực hiện điều này trong các phiên bản trước.Android: tự động thay đổi biểu tượng ActionBar?

+0

Có bất cứ điều gì xảy ra khi bạn gọi 'setIcon'? Và nếu bạn đang cố gắng hoàn thành mọi thứ trong bất kỳ thứ gì trước Honeycomb, bạn nên xem [ActionBarSherlock.] (Http://actionbarsherlock.com/) – adneal

+0

Tôi đang sử dụng một thành phần ActionBar-esque tùy chỉnh cho pre-v11 (tương tự như ActionBarSherlock). Điều này là dành cho v11-v13 (tổ ong). Khi tôi gọi setIcon trong tổ ong, tôi nhận được một ngoại lệ methodnotfound. – ab11

+0

setIcon chỉ khả dụng ở cấp API> = 14 – Sandra

Trả lời

17

Nếu bạn đang sử dụng mã ActionbarCompat được cung cấp bởi google, bạn có thể truy cập vào biểu tượng nhà qua ActionBarHelperBase. lớp java cho API v4 trở đi.

//code snippet from ActionBarHelperBase.java 
    ... 
    private void setupActionBar() { 
    final ViewGroup actionBarCompat = getActionBarCompat(); 
    if (actionBarCompat == null) { 
     return; 
    } 

    LinearLayout.LayoutParams springLayoutParams = new LinearLayout.LayoutParams(
      0, ViewGroup.LayoutParams.MATCH_PARENT); 
    springLayoutParams.weight = 1; 

    // Add Home button 
    SimpleMenu tempMenu = new SimpleMenu(mActivity); 
    SimpleMenuItem homeItem = new SimpleMenuItem(tempMenu, 
      android.R.id.home, 0, mActivity.getString(R.string.app_name)); 
    homeItem.setIcon(R.drawable.ic_home_ftn); 
    addActionItemCompatFromMenuItem(homeItem); 

    // Add title text 
    TextView titleText = new TextView(mActivity, null, 
      R.attr.actionbarCompatTitleStyle); 
    titleText.setLayoutParams(springLayoutParams); 
    titleText.setText(mActivity.getTitle()); 
    actionBarCompat.addView(titleText); 
} 
... 

Bạn có thể sửa đổi mã thành nút trang chủ có thể truy cập vào các hoạt động mở rộng ActionBarActivity và thay đổi theo cách đó.

Tổ ong có vẻ khó hơn một chút và dường như không có khả năng truy cập dễ dàng như vậy. Khi đoán, id của nó cũng phải là android.R.id.home để bạn có thể lấy từ chế độ xem trong ActionBarHelperHoneycomb.java

+5

Có! Cảm ơn bạn. 'Activity.findViewById (android.R.id.home)' hoạt động. – ab11

22

Nếu actionbar của bạn hoạt động giống như Sherlock và được dựa trên các mục menu, đây là giải pháp của tôi:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem switchButton = menu.findItem(R.id.SwitchSearchOption);  
    if(searchScriptDisplayed){ 
     switchButton.setIcon(R.drawable.menu_precedent); 
    }else{ 
     switchButton.setIcon(R.drawable.icon_search); 
    } 
    return super.onPrepareOptionsMenu(menu); 

} 
+0

tốt, đối với tổ ong tôi sử dụng thanh tác vụ do sdk cung cấp. vì vậy, tôi đang cố gắng tìm một tổ ong tương đương với phương thức ActionBar.setIcon() được cung cấp trong v14. – ab11

+2

Cảm ơn đoạn trích tuyệt vời này - đã tìm kiếm điều này trong một thời gian! – aaronsnoswell

+1

đã làm việc cho tôi! cảm ơn –

0

ActionBar sẽ sử dụng thuộc tính android: logo của tệp kê khai của bạn, nếu một được cung cấp. Điều đó cho phép bạn sử dụng các tài nguyên có thể vẽ riêng biệt cho biểu tượng (Trình khởi chạy) và biểu tượng (ActionBar, trong số những thứ khác).

0

tôi sẽ nói bạn làm điều gì đó như thế này:

getSupportActionBar().setHomeButtonEnabled(true); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_drawer); 

thấy liên kết How to change the icon actionBarCompat

Các vấn đề liên quan