2015-10-13 3 views
10

Мне нужно изменить панель навигации на Android. Как и «легкий» вариант справа на изображении ниже  , как указано в https://www.google.co.in/design/spec/layout/structure.html#structure-system-bars.

Теперь я могу изменить фон панели навигации с помощьюИзменение цвета значка панели навигации на Android

"android:navigationBarColor"

я

enter image description here

, но, кажется, нет никакого способа изменить цвет кнопки в темноте ,

У кого-нибудь есть идея, как это сделать.

PS:

При исследовании в AOSP для классов, ответственных за NavigationButtons, я мог бы найти NavigationBarView.java, PhoneStatusBar.java, PhoneWindowManager.java, navigation_bar.xml.

Я думал о том, как получить ссылку на кнопки навигации, такие как ic_sysbar_recent и изменить их оттенок. Но они частные, и я не могу получить их ссылку.

Кроме того, я видел людей, использующих библиотеку xposed для этого L-NAVBAR, но я не хочу использовать внешнюю библиотеку.

+0

Кто-то исправит меня, если я ошибаюсь, но кнопки панели навигации являются значками, поэтому они не будут автоматически изменять цвет. Либо замените их темными (если возможно), либо попробуйте их инвертировать. – showp1984

+0

@ showp1984 Да, я хочу знать о методе изменения этих значков. (KeyButtonView согласно https://android.googlesource.com/platform/frameworks/base/+/android-4.2.2_r1/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml) –

+0

Согласно https: // разработчик .android.com/training/material/theme.html -> «Когда вы настраиваете панели навигации и состояния, сделайте их прозрачными или измените только строку состояния. Навигационная панель во всех остальных случаях должна оставаться черной». - Это будет невозможно. – showp1984

ответ

2

Из того, что я могу сказать, эти значки являются частью com.android.systemui, поэтому для их изменения требуется root + patch или injection (например, Xposed).

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

Другой альтернативой может быть скрыть панель вообще https://developer.android.com/training/system-ui/navigation.html

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

+0

«Создайте вторую панель инструментов внизу своими собственными кнопками» - Хорошо, но они не будут иметь такую ​​же функцию, что и вы не сможете подключить их к systemui в так же. –

5

Начиная с Android O становится очень просто, как вы могли бы просто:

View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); 

Для того чтобы этот эффект, окно должно запросить FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS но не FLAG_TRANSLUCENT_NAVIGATION.

Документация: https://developer.android.com/reference/android/view/View.html#SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR

6

Если вы используете API 27 (Android 8.1) или выше, вы можете достичь его с этим в вашей теме:

<item name="android:windowLightNavigationBar">true</item> 

Вы можете создать папку с именем значения-v27 и поместите версию вашей темы (в styles.xml) с легкой навигационной панелью и приведенным выше кодом, чтобы получить темные кнопки панели навигации.
Таким образом, пользователи с Android 8.0 или ниже получат стандартную (черную) навигационную панель, а пользователи с Android 8.1 или выше получат белый навигатор с темными кнопками.

+2

Следует отметить, что вам также необходимо установить ' @ color/background_material_light'. – SUPERCILEX

+0

@SUPERCILEX Вы можете использовать любой цвет, который вам нравится, а не только background_material_light. Просто убедитесь, что используете светлый цвет, поскольку кнопки будут темными. – Carlos

+0

Да, я просто хотел, чтобы было ясно, что вам нужно указать этот атрибут с цветом _some_, потому что я потратил несколько минут на то, чтобы понять, почему панель навигации была полностью черной. (Я думал, что 'windowLightNavigationBar' изменит цвета кнопок для вас.) – SUPERCILEX

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