Intereting Posts
Требования к кордове Android не удалось: «Не удалось найти установленную версию Gradle» Как создать андроид-список, например, андроид google chrome tab Как создать простой Android-виджет Почему MenuItemCompat.getActionProvider возвращает null? Android: Центрировать изображение Решение для ошибки INSTALL_FAILED_INSUFFICIENT_STORAGE на Android «Папка Android SDK внутри папки приложения» При обновлении студии Android Доступность Отсутствует contentDescription атрибут на изображении, как удалить это предупреждение? Квадратный ImageView Как получить имя файла из пути к файлу в android Использование $ {applicationId} в манифесте библиотеки Как определить, использует ли устройство 12 или 24-часовой формат времени? Когда использовать handler.post () и когда в новую тему () Какое знание / экспертиза требуется для переноса андроида на пользовательское устройство ручного управления? Нет сгенерированного файла R.java в моем проекте

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

Я использую библиотеку 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" .