android7.0菜单没图标,Android 7.0、8.1 导航栏上添加图标 及 相应功能

转自  https://blog..net/lancelots/article/details/82864210

老板写到很好,我都用上了,另外,我在上面加了一点点东西,就是当添加一个按钮或者图标,想要做相应功能,在文章最后有添加的。(备注: 我的是Android 8.1、rk3368的)

----------------------------------------------------------------------------

转自  https://blog..net/lancelots/article/details/82864210

Android  7.0的代码和6.0有很大变化,在导航栏上添加图标修改的文件更多些,

我先列出需要修改的文件:

1,frameworks/base/packages/SystemUI/res/layout/mark.xml

2,frameworks/base/packages/SystemUI/res/drawable-sw600dp/custom_mark.png

3,frameworks/base/packages/SystemUI/res/values-sw600dp/config.xml

4,frameworks/base/SystemUI/res/values-sw600dp/config.xml

5,frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java

6,frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java

下面一个一个把修改的文件代码列出,首先是mark.xml文件,Andoid 7.0的recent,back,home定义按键都是定义xml文件.我也是按照这三个按键的定义标准来.

xmlns:systemui="http://schemas.android.com/apk/res-auto"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_weight="1"

>

android:id="@+id/markTest"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_marginEnd="2dp"

android:src="@drawable/custom_mark"

android:scaleType="centerInside"

systemui:keyCode="82"

android:contentDescription="@string/accessibility_menu"

/>

2,custom_mark.png就是mark.xml所引用的图片,这个没什么说的,随便找一张图片就行

3,frameworks/base/packages/SystemUI/res/values-sw600dp/config.xml文件

mark;back,home,recent,allapps;space    //在这里添加mark

4,frameworks/base/packages/SystemUI/res/values/config.xml文件

mark;back,home,recent,allapps;space   //同样添加mark

5,frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java文件

@Nullable

protected View inflateButton(String buttonSpec, ViewGroup parent, boolean landscape,

int indexInParent) {

LayoutInflater inflater = landscape ? mLandscapeInflater : mLayoutInflater;

float size = extractSize(buttonSpec);

String button = extractButton(buttonSpec);

View v = null;

if("mark".equals(button)){    //判断当前的keyguarButton,如果是mark的话,inflate它

v = parent.findViewById(R.id.markTest);

if (null == v) {

isAddToParent = true;

v = inflater.inflate(R.layout.mark, parent, false);

}

changeViewPaddingAndWidth(v,landscape,mIsBookuiMode);

}

6,frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java文件

public ButtonDispatcher getMarkButton() {    //定义获取mark的方法

return mButtonDisatchers.get(R.id.markTest);

}

public void setDisabledFlags(int disabledFlags, boolean force) {

if (!force && mDisabledFlags == disabledFlags) return;

mDisabledFlags = disabledFlags;

......

getMarkButton().setVisibility(View.VISIBLE);    //在这里设置图标可见

......

}

然后可以单独编译一下SystemUI,就可以看到自己的图标出现到导航栏上了~

--------------------------------------------------------------------------

8eff0ddbeff83330c663cf068426a399.png

另外,在8.1版本添加按键事件(其他版本不知道):

….\SystemUI\src\com\android\systemui\statusbar\phone\NavigationBarFragment.java

prepareNavigationBarView(){

//添加响应方法

ButtonDispatcher hideButton = mNavigationBarView.getHideButton();

hideButton.setOnClickListener(this::onHideClick);

}

private voidonHideClick(View v) {

//添加对应的方法

Intent intent = new Intent();

intent.setAction(INCAR_SYSTEM_HIDE);

getContext().sendBroadcast(intent);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值