Подтвердить что ты не робот

Android: динамически менять значок ActionBar?

Я хотел бы динамически изменить значок "home" в ActionBar. Это легко сделать в v14 с помощью ActionBar.setIcon(...), но я не могу все равно выполнить это в предыдущих версиях.

4b9b3361

Ответ 1

Если вы используете ActionbarCompat код, предоставленный Google, вы можете получить доступ к значку дома через класс ActionBarHelperBase.java для API v4 и далее.

    //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);
}
...

Вы должны иметь возможность изменять код на домашней кнопке, доступной для действий, расширяющих ActionBarActivity и изменяя их таким образом.

Honeycomb кажется немного сложнее, и, похоже, он не дает такого легкого доступа. Предположим, что его id также должен быть android.R.id.home, поэтому вы можете извлечь это из представления в ActionBarHelperHoneycomb.java

Ответ 2

Если ваша панель действий работает как Sherlock и основана на элементах меню, это мое решение:

@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);

}

Ответ 3

ActionBar будет использовать атрибут android: логотип вашего манифеста, если он предоставлен. Это позволяет использовать отдельные доступные ресурсы для значка (Launcher) и логотипа (ActionBar, между прочим).

Ответ 4

Я бы сказал, что вы делаете что-то вроде этого:

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

см. ссылку Как изменить значок actionBarCompat