Добавляем мультимедийные кнопки в navbar/навбар

Рейтинг:   / 0
ПлохоОтлично 

Данная инструкция понадобится тем, кто использует планшет в автомобиле как carpc. Себе я поставил Nexus 7 2012 3G. Прошивок для него много, аж начиная с андроид 4.2 до 7.1 на момент написания данной инструкции. Но заточенных именно для carpc имеется только 2 прошивки, которые у меня через некоторое время начинали глючить.

В связи с этим решил установить стоковую прошивку на надроид 5.1. Но, т.к. привык к мультимедийным кнопкам в навбаре решил сделать их и на стоковой прошивке. Инструкции как это сделать я не нашел, но нашел готовые патчи для Nexus 7 2013 и посмотрев как автор это сделал попробовал и у себя.

На android 5.1 Lollipop

Думаю можно попробовать по инструкции для 6.0

- Декомпилируем \system\priv-app\SystemUI\SystemUI.apk
- Копируем следующие изображения в папку \res\drawable-sw600dp-hdpi-v13 (-v13 может и не быть, зависит от инструмента декомпиляции)
- В файле \res\layout\heads_up.xml заменить

"@integer/notification_panel_layout_gravity"

на
"fill_horizontal|center|top"

- В файле \res\layout\keyguard_glow_pad_view.xml заменить
"@integer/kg_selector_gravity"

на
"center|left|top|clip_horizontal"

- В файле \res\layout\status_bar_expanded.xml заменить в трех местах
"@integer/notification_panel_layout_gravity"

на
"fill_horizontal|center|top"

- В файле \res\layout\status_bar_expanded_header.xml заменить
"@integer/notification_panel_layout_gravity"

на
"fill_horizontal|center|top"

- В файле \res\layout\super_status_bar.xml заменить
"@integer/notification_panel_layout_gravity"

на
"fill_horizontal|center|top"


- Файл \res\layout-sw600dp-v13\navigation_bar.xml приводим к следующему виду (синие строки - добавить, красные - изменить)
<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.statusbar.phone.NavigationBarView android:background="@drawable/system_bar_background" android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res-auto">
<FrameLayout android:id="@id/rot0" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:orientation="horizontal" android:id="@id/nav_buttons" android:clipChildren="false" android:clipToPadding="false" android:layout_width="fill_parent" android:layout_height="fill_parent" android:animateLayoutChanges="true">
<View android:visibility="invisible" android:layout_width="@dimen/navigation_extra_key_width" android:layout_height="fill_parent" android:layout_weight="0.0" android:layout_marginStart="2.0dip" />
<Space android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/prev" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_prev" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_prev_track" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="88" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/play" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_play" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_play_track" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="85" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/next" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_next" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_next_track" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="87" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/back" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_back" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_back" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="4" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/home" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_home" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_home" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="3" systemui:keyRepeat="true" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/recent_apps" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_recent" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_recent" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/volmute" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_mute" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_volume_mute" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="164" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/voldown" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_voldown" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_volume_down" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="25" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/volup" android:layout_width="55.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_volup" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_volume_up" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="24" />
<Space android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" />
<FrameLayout android:layout_width="@dimen/navigation_extra_key_width" android:layout_height="fill_parent" android:layout_weight="0.0" android:layout_marginEnd="2.0dip">
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/menu" android:visibility="invisible" android:layout_width="@dimen/navigation_extra_key_width" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_menu" android:scaleType="centerInside" android:contentDescription="@string/accessibility_menu" android:layout_marginEnd="2.0dip" systemui:keyCode="82" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/ime_switcher" android:visibility="invisible" android:layout_width="@dimen/navigation_extra_key_width" android:layout_height="fill_parent" android:src="/@drawable/ic_ime_switcher_default" android:scaleType="centerInside" android:contentDescription="@string/accessibility_ime_switch_button" android:layout_marginEnd="2.0dip" />
</FrameLayout>
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:id="@id/lights_out" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="fill_parent">
<Space android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" android:layout_marginStart="5.0dip" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="128.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" android:layout_marginEnd="5.0dip" />
<Space android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" />
</LinearLayout>
<com.android.systemui.statusbar.policy.DeadZone android:layout_gravity="top" android:id="@id/deadzone" android:layout_width="fill_parent" android:layout_height="fill_parent" systemui:minSize="@dimen/navigation_bar_deadzone_size" systemui:maxSize="@dimen/navigation_bar_deadzone_size_max" systemui:holdTime="@integer/navigation_bar_deadzone_hold" systemui:decayTime="@integer/navigation_bar_deadzone_decay" systemui:orientation="horizontal" />
</FrameLayout>
<FrameLayout android:id="@id/rot90" android:paddingTop="0.0dip" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:orientation="horizontal" android:id="@id/nav_buttons" android:clipChildren="false" android:clipToPadding="false" android:layout_width="fill_parent" android:layout_height="fill_parent" android:animateLayoutChanges="true">
<View android:visibility="invisible" android:layout_width="@dimen/navigation_extra_key_width" android:layout_height="fill_parent" android:layout_weight="0.0" android:layout_marginStart="2.0dip" />
<Space android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/prev" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_prev" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_prev_track" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="88" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/play" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_play" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_play_track" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="85" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/next" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_next" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_next_track" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="87" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/back" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_back" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_back" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="4" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/home" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_home" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_home" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="3" systemui:keyRepeat="true" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/recent_apps" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_recent" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_recent" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/volmute" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_mute" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_volume_mute" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="164" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/voldown" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_voldown" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_volume_down" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="25" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/volup" android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_volup" android:scaleType="center" android:layout_weight="0.0" android:contentDescription="@string/accessibility_volume_up" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" systemui:keyCode="24" />
<Space android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" />
<FrameLayout android:layout_width="@dimen/navigation_extra_key_width" android:layout_height="fill_parent" android:layout_weight="0.0" android:layout_marginEnd="2.0dip">
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/menu" android:visibility="invisible" android:layout_width="@dimen/navigation_extra_key_width" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_menu" android:scaleType="centerInside" android:contentDescription="@string/accessibility_menu" android:layout_marginEnd="2.0dip" systemui:keyCode="82" />
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/ime_switcher" android:visibility="invisible" android:layout_width="@dimen/navigation_extra_key_width" android:layout_height="fill_parent" android:src="/@drawable/ic_ime_switcher_default" android:scaleType="centerInside" android:contentDescription="@string/accessibility_ime_switch_button" android:layout_marginEnd="2.0dip" />
</FrameLayout>
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:id="@id/lights_out" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="fill_parent">
<Space android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" android:layout_marginStart="5.0dip" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_large" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" />
<ImageView android:layout_width="95.0dip" android:layout_height="fill_parent" android:src="/@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" android:layout_weight="0.0" android:paddingStart="25.0dip" android:paddingEnd="25.0dip" android:layout_marginEnd="5.0dip" />
<Space android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" />
</LinearLayout>
<com.android.systemui.statusbar.policy.DeadZone android:layout_gravity="top" android:id="@id/deadzone" android:layout_width="fill_parent" android:layout_height="fill_parent" systemui:minSize="@dimen/navigation_bar_deadzone_size" systemui:maxSize="@dimen/navigation_bar_deadzone_size_max" systemui:holdTime="@integer/navigation_bar_deadzone_hold" systemui:decayTime="@integer/navigation_bar_deadzone_decay" systemui:orientation="vertical" />
</FrameLayout>
</com.android.systemui.statusbar.phone.NavigationBarView>

- В конце файла \res\values\ids.xml добавить следующие строки
<item type="id" name="volup">false</item>
<item type="id" name="volmute">false</item>
<item type="id" name="voldown">false</item>
<item type="id" name="prev">false</item>
<item type="id" name="play">false</item>
<item type="id" name="next">false</item>

- В конце файла \res\values\strings.xml добавить следующие строки
<string name="accessibility_prev_track">Previous track.</string>
<string name="accessibility_play_track">Play track.</string>
<string name="accessibility_next_track">Next track.</string>
<string name="accessibility_volume_mute">Mute volume.</string>
<string name="accessibility_volume_down">Increase volume.</string>
<string name="accessibility_volume_up">Decrease volume.</string>

Компилируем SystemUI.apk и заменяем в системе.

Готовый патч под TWRP для Nexus 7 2012 под android 5.1 LMY47V

 

На android 6.0

- декомпилируем \system\priv-app\SystemUI\SystemUI.apk
- копируем следующие изображения в папку \res\drawable-sw600dp-hdpi-v13 (-v13 может и не быть, зависит от инструмента декомпиляции)
- в файле \res\layout-sw600dp-v13\navigation_bar.xml редактируем так
- в \res\values\ids.xml добавить

<item type="id" name="volup">false</item>
<item type="id" name="volmute">false</item>
<item type="id" name="voldown">false</item>
<item type="id" name="prev">false</item>
<item type="id" name="play">false</item>
<item type="id" name="next">false</item>

- в \res\values\strings.xml добавить
<string name="accessibility_prev_track">Previous track.</string>
<string name="accessibility_play_track">Play track.</string>
<string name="accessibility_next_track">Next track.</string>
<string name="accessibility_volume_mute">Mute volume.</string>
<string name="accessibility_volume_down">Increase volume.</string>
<string name="accessibility_volume_up">Decrease volume.</string>

Компилируем SystemUI.apk и заменяем в системе.

 

На android 7.X

Просто устанавливаем приложение Custom Navigation Bar и через него добавляем/настраиваем кнопки

либо проделываем так
- декомпилируем \system\priv-app\SystemUI\SystemUI.apk
- в файле \res\xml\tuner_prefs.xml перед (либо в любом удобном для вас месте)

<Preference android:title="@string/other" android:key="other" android:fragment="com.android.systemui.tuner.OtherPrefs" />

добавить
<Preference android:title="@string/nav_bar" android:key="sysui_nav_bar" android:fragment="com.android.systemui.tuner.NavBarTuner" />

Компилируем SystemUI.apk и заменяем в системе.
Открываем шторку, жмем шестеренку (настройки) 5-7 секунд и отпускаем. Откроется настройки. В самом конце появится пункт "System UITuner". Заходим в панель навигации и добавляем/изменяем кнопки.

P.S. кто хочет изменить высоту навбара, сделать следующее:
- декомпилируем \system\framework\framework-res.apk
- в файле \res\values\dimens.xml значение на

navigation_bar_height_landscape

изменить к примеру из 48 на 36.
Компилируем framework-res.apk и заменяем в системе.

 

Будет выглядеть так

При копировании материала с сайта, активная ссылка на оригинальный материал обязательна.

Добавить комментарий


Защитный код
Обновить