Android 8.0 Navigationbar

1.控制NavigationBar显示职位

   Navigationbar会随着屏幕的旋转而改变位置,或者在屏幕底部或者是在屏幕一侧,控制的mo默认的位置在PhoneWindowManager 中的navigationBarPosition(...)方法中

    private int navigationBarPosition(int displayWidth, int displayHeight, int displayRotation) {
       if (mNavigationBarCanMove && displayWidth > displayHeight) {
           if (displayRotation == Surface.ROTATION_270) {
               return NAV_BAR_LEFT;
           } else {
               return NAV_BAR_RIGHT;
           }
       }
       return NAV_BAR_BOTTOM;

可以自行修改,设置默认显示的位置。

2.改变Navigationbar 显示的buttom

    修改frameworks/base/packages/SystemUI/res/values-sw600dp/config.xml中的config_navBarLayout值即可进行添加

    <!-- Nav bar button default ordering/layout -->
    <string name="config_navBarLayout" translatable="false">left;back,home,recent;right</string>

 3.扩展navigationbar 

    3.1首先修改config_navBarLayout的值,加入你要添加的字符串

    3.2 修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java中的private View createView(String buttonSpec, ViewGroup parent, LayoutInflater inflater) {}方法在里面加入需要的字段判断,引入需要的布局文件(举例引入test.xml)

private View createView(String buttonSpec, ViewGroup parent, LayoutInflater inflater) {
        View v = null;
        String button = extractButton(buttonSpec);
        if (LEFT.equals(button)) {
            String s = Dependency.get(TunerService.class).getValue(NAV_BAR_LEFT, NAVSPACE);
            button = extractButton(s);
        } else if (RIGHT.equals(button)) {
            String s = Dependency.get(TunerService.class).getValue(NAV_BAR_RIGHT, MENU_IME);
            button = extractButton(s);
        }
        // Let plugins go first so they can override a standard view if they want.
        for (NavBarButtonProvider provider : mPlugins) {
            v = provider.createView(buttonSpec, parent);
            if (v != null) return v;
        }
        if (HOME.equals(button)) {
            v = inflater.inflate(R.layout.home, parent, false);
        } else if (BACK.equals(button)) {
            v = inflater.inflate(R.layout.back, parent, false);
        } else if (RECENT.equals(button)) {
            v = inflater.inflate(R.layout.recent_apps, parent, false);
        } else if (Test.equals(button)) {
            v = inflater.inflate(R.layout.test, parent, false);
        } else if (MENU_IME.equals(button)) {
            v = inflater.inflate(R.layout.menu_ime, parent, false);
        } else if (NAVSPACE.equals(button)) {
            v = inflater.inflate(R.layout.nav_key_space, parent, false);
        } else if (CLIPBOARD.equals(button)) {
            v = inflater.inflate(R.layout.clipboard, parent, false);
        } else if (button.startsWith(KEY)) {
            String uri = extractImage(button);
            int code = extractKeycode(button);
            v = inflater.inflate(R.layout.custom_key, parent, false);
            ((KeyButtonView) v).setCode(code);
            if (uri != null) {
                if (uri.contains(":")) {
                    ((KeyButtonView) v).loadAsync(Icon.createWithContentUri(uri));
                } else if (uri.contains("/")) {
                    int index = uri.indexOf('/');
                    String pkg = uri.substring(0, index);
                    int id = Integer.parseInt(uri.substring(index + 1));
                    ((KeyButtonView) v).loadAsync(Icon.createWithResource(pkg, id));
                }
            }
        }
        return v;
    }

4.注意

   KeyButtonView.java 中会有private final KeyButtonRipple mRipple; 这个是点击NavigationBar buttom时有一个扩大光圈的效果,注释掉即可取消

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值