2014-11-07 4 views
4

Простой вопрос: Как использовать getDisplayOptions() панели действий? Я хочу поддерживать состояние панели действий, поскольку я просматриваю свой взгляд с помощью некоторого пользовательского представления. Поэтому перед тем, как приступить к моему представлению, я сохраняю состояние панели действий, чтобы вернуться к исходному состоянию, когда мое представление удалено. Я установил несколько настроек в свою панель действия, напримерКак получить атрибут ActionBar в моем классе [android]

actionBar.setDisplayHomeAsUpEnabled(false); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setDisplayShowCustomEnabled(false); 
    actionBar.setDisplayShowHomeEnabled(true); 

Поэтому, когда я удаляю свое представление, я хочу вернуть эти настройки. Но я не вижу никакого метода, например actionBar.isDisplayHomeAsUpEnabled() и т. Д. В API. Хотя я вижу actionBar.getDisplayOptions(). Но не знаю, как его использовать. Может ли кто-нибудь помочь мне в этом.

ответ

9

Простой вопрос: Как использовать getDisplayOptions() панели действий?

При изменении параметров отображения в ActionBar, ActionBar.setDisplayOptions(int options, int mask) вызывается внутри спарить этот вариант дисплея с соответствующей битовой маской.

Например, когда ActionBar.setDisplayHomeAsUpEnabled называется, внутренне ActionBar.setDisplayOptions(int options, int mask) называется так:

setDisplayOptions(showHomeAsUp ? DISPLAY_HOME_AS_UP : 0, DISPLAY_HOME_AS_UP); 

Так что, если вы хотите, чтобы проверить, если конкретный вариант отображения включен, просто сравнить эту маску 0 используя побитовая операция.

// Retrieve the current set of display options 
final int displayOptions = actionBar.getDisplayOptions(); 
// Determine which display options are enabled 
final boolean isShowHomeEnabled = (displayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0; 
final boolean isHomeAsUpEnabled = (displayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0; 
final boolean isShowTitleEnabled = (displayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0; 
final boolean isUseLogoEnabled = (displayOptions & ActionBar.DISPLAY_USE_LOGO) != 0; 
final boolean isShowCustomEnabled = (displayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0; 

Полный пример может быть что-то вроде:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    final ActionBar actionBar = getActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
    actionBar.setDisplayShowTitleEnabled(false); 
    actionBar.setDisplayUseLogoEnabled(true); 

    // Retrieve the current set of display options 
    final int displayOptions = actionBar.getDisplayOptions(); 
    // Determine which display options are enabled 
    final boolean isShowHomeEnabled = (displayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0; 
    final boolean isHomeAsUpEnabled = (displayOptions & ActionBar.DISPLAY_HOME_AS_UP) != 0; 
    final boolean isShowTitleEnabled = (displayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0; 
    final boolean isUseLogoEnabled = (displayOptions & ActionBar.DISPLAY_USE_LOGO) != 0; 
    final boolean isShowCustomEnabled = (displayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0; 

    System.out.println("show home: " + isShowHomeEnabled); 
    System.out.println("home as up: " + isHomeAsUpEnabled); 
    System.out.println("show title: " + isShowTitleEnabled); 
    System.out.println("use logo: " + isUseLogoEnabled); 
    System.out.println("show custom: " + isShowCustomEnabled); 
} 

Что бы напечатать:

show home: false 
home as up: true 
show title: false 
use logo: true 
show custom: false 
+1

Отличный Высокий Спасибо большое за такое подробное объяснение. Работает на меня. – Android

Смежные вопросы