Android 7.0、8.1 导航栏上添加图标 及 相应功能

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

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

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

转自  https://blog.csdn.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,就可以看到自己的图标出现到导航栏上了~

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

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

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

prepareNavigationBarView(){

         // 添加响应方法

        ButtonDispatcher hideButton = mNavigationBarView.getHideButton();

        hideButton.setOnClickListener(this::onHideClick);

}

private void onHideClick(View v) {

         // 添加对应的方法

         Intent intent = new Intent();

         intent.setAction(INCAR_SYSTEM_HIDE);  

         getContext().sendBroadcast(intent);

}

你可能感兴趣的:(Android,车载)