Intereting Posts
Как использовать delete намерение выполнить некоторые действия по четкому уведомлению? Как создать RelativeLayout программно с двумя кнопками один поверх другого? Как интегрировать paypal пожертвовать в Android-приложение? Соедините два телефона Android с Wi-Fi (без ноутбука или точки доступа) и отправьте файл Выровнять кнопки AlertDialog до центра Слайд-просмотр (сверху) другого вида Как запустить файл apk онлайн? Запрос пользователя оценить / просмотреть / комментировать Android Маркет Кордова Ионная: Включите мобильную клавиатуру Android android Сделать навигационную панель максимально активной анимации активности Загрузите активность в фоновом режиме перед ее отображением HTTPURLConnection – POST multipart / form-data с большим файлом с FixedLengthStreamingMode Защитить скрипт от ботов и нежелательных запросов OkHttp как регистрировать тело запроса Могу ли я создать приложение для Android в качестве отладки, но подписать с хранилищем ключей

Получить ссылку на переключатель ящика в панели действий поддержки

Я использую библиотеку ShowcaseView для учебника по приложениям. Мне нужно получить ссылку на кнопку переключения навигационного ящика (она же кнопка «гамбургер»):

Введите описание изображения здесь

Я использую панель инструментов как панель действий, и я понятия не имею, как получить эту кнопку. Обычно для переключения ящика я использую это:

@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { toggleDrawer(Gravity.START); } } 

Но когда я использую Device Monitor для создания моментального снимка экрана, нет представления с идентификатором «home».

Какие-либо предложения?

Solutions Collecting From Web of "Получить ссылку на переключатель ящика в панели действий поддержки"

В исходном ActionBar два View показанные слева, являются Up View и Home View . Up View – это кнопка, которая обычно отображает значок «гамбургер», а Home View отображает значок приложения. Все изменилось с классом Toolbar . Больше нет представления по умолчанию с идентификатором android.R.id.home , хотя установка Toolbar в качестве поддержки ActionBar будет по-прежнему onOptionsItemSelected() с соответствующим идентификатором элемента при щелчке по вопросу « View .

Текущий класс Toolbar теперь относится к Up View внутренне в виде Nav Button View , и он создает этот View динамически. Я использовал два разных метода, чтобы получить ссылку на это – тот, который выполняет итерацию над дочерним представлением Toolbar , и тот, который использует отражение в классе Toolbar .

Для итерационного метода, после того, как вы установили переключатель, но до того, как вы добавили другие ImageButton s на Toolbar , Nav Button View является единственным дочерним элементом ImageButton на Toolbar , который вы можете получить так:

 private ImageButton getNavButtonView(Toolbar toolbar) { for (int i = 0; i < toolbar.getChildCount(); i++) if(toolbar.getChildAt(i) instanceof ImageButton) return (ImageButton) toolbar.getChildAt(i); return null; } 

Если вам нужна ссылка на вид значка приложения – то, что соответствует старому домашнему виду, вы можете использовать аналогичный метод для поиска ImageView .

С другой стороны, рефлексивный метод можно использовать в любое время после того, как View был установлен на Toolbar .

 private ImageButton getNavButtonView(Toolbar toolbar) { try { Class<?> toolbarClass = Toolbar.class; Field navButtonField = toolbarClass.getDeclaredField("mNavButtonView"); navButtonField.setAccessible(true); ImageButton navButtonView = (ImageButton) navButtonField.get(toolbar); return navButtonView; } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } return null; } 

Опять же, аналогичный метод можно использовать для значка « View , получая вместо этого поле "mLogoView" .