需求
基于 MTK8163 8.1 平台定制导航栏部分, 在左边增加音量减, 右边增加音量加
运行截图
见图
代码修改步骤
增加需要的音量资源文件, 增加 4 张图片到 drawable 图片资源下, 注意尺寸和 back,home,recent 一致, 分为亮色和暗色两种图片.(图片尽然还要自己搞, 幸好有在线 PS 可以修改尺寸和颜色) ic_sysbar_volume_up.png,ic_sysbar_volume_up_dark.png,ic_sysbar_volume_down.png,ic_sysbar_volume_down_dark.png;
layout 下增加 volume_down.xml 和 volume_up.xml(里面 keyRepeatExt 是自己定义的, 可以忽略, 为了标识是音量键, 方便在 KeyButtonView.java 里作特殊长按处理)
<com.android.systemui.statusbar.policy.KeyButtonView
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:systemui="http://schemas.android.com/apk/res-auto"
- android:id="@+id/volume_down"
- android:layout_width="@dimen/navigation_key_width"
- android:layout_height="match_parent"
- android:layout_weight="0"
- systemui:keyCode="25"
- systemui:keyRepeatExt="true"
- android:scaleType="center"
- android:contentDescription="@string/accessibility_key"
- android:paddingStart="@dimen/navigation_key_padding"
- android:paddingEnd="@dimen/navigation_key_padding"
- />
- <com.android.systemui.statusbar.policy.KeyButtonView
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:systemui="http://schemas.android.com/apk/res-auto"
- android:id="@+id/volume_up"
- android:layout_width="@dimen/navigation_key_width"
- android:layout_height="match_parent"
- android:layout_weight="0"
- systemui:keyCode="24"
- systemui:keyRepeatExt="true"
- android:scaleType="center"
- android:contentDescription="@string/accessibility_key"
- android:paddingStart="@dimen/navigation_key_padding"
- android:paddingEnd="@dimen/navigation_key_padding"
- />
修改 res/values-sw600dp/config.xml 下的 name 为 config_navBarLayout 配置, 增加音量加减选项 (我这里平板, 对 values-sw600dp 生效, 默认是 values)
<string name="config_navBarLayout" translatable="false">left;volume_down,back,home,recent,volume_up;right</string>
修改 res/values-sw600dp/dimens.xml 下的 navigation_key_width 和 navigation_key_padding 参数, 对每个 icon 调整合适的宽度, 以适应增加音量加减之后的布局
- <dimen name="navigation_key_width">90dp</dimen>
- <dimen name="navigation_key_padding">0dp</dimen>
NavigationBarInflaterView.java 中, 增加
- public static final String VOLUME_DOWN = "volume_down";
- public static final String VOLUME_UP = "volume_up";
createView() 方法里增加 , 以加载音量加减的布局:
- else if (VOLUME_DOWN.equals(button)) {
- v = inflater.inflate(R.layout.volume_down, parent, false);
- } else if (VOLUME_UP.equals(button)) {
- v = inflater.inflate(R.layout.volume_up, parent, false);
- }
NavigationBarView.java 里, 增加:
private KeyButtonDrawable mVolumeDown,mVolumeUp;
构造方法里增加, put 到 mButtonDispatchers 数据结构里:
- mButtonDispatchers.put(R.id.volume_down, new ButtonDispatcher(R.id.volume_down));
- mButtonDispatchers.put(R.id.volume_up, new ButtonDispatcher(R.id.volume_up));
- getVolumeDownButton().setLongClickable(false);
- getVolumeUpButton().setLongClickable(false);
增加新方法:
- public ButtonDispatcher getVolumeDownButton() {
- return mButtonDispatchers.get(R.id.volume_down);
- }
- public ButtonDispatcher getVolumeUpButton() {
- return mButtonDispatchers.get(R.id.volume_up);
- }
updateIcons() 方法里增加, 获取音量加减的 icon 资源:
- mVolumeDown = getDrawable(ctx,R.drawable.ic_sysbar_volume_down,R.drawable.ic_sysbar_volume_down_dark);
- mVolumeUp = getDrawable(ctx,R.drawable.ic_sysbar_volume_up,R.drawable.ic_sysbar_volume_up_dark);
调用方法 setNavigationIconHints() 里增加对音量图片资源的设置:
- getVolumeDownButton().setImageDrawable(mVolumeDown);
- getVolumeUpButton().setImageDrawable(mVolumeUp);
setDisabledFlags() 方法里增加:
- //volume down and up just follow the home key
- getVolumeDownButton().setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
- getVolumeUpButton().setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
至此, make,push...
来源: https://juejin.im/post/5ad9a5326fb9a07aa83e49be