文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android导航栏功能项的显示与屏蔽介绍

2024-04-02 19:55

关注

 Android 的导航栏有诸多功能,例入 截屏,音量加,音量减,最近任务,菜单.返回,主页面,输入法开关 ......

代码源路径:frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\NavigationBarView.java


    public ButtonDispatcher getScreenshotButton() {
        return mButtonDispatchers.get(R.id.screenshot);
    }
 
    public ButtonDispatcher getVolumeAddButton() {
        return mButtonDispatchers.get(R.id.volume_add);
    }
 
    public ButtonDispatcher getVolumeSubButton() {
        return mButtonDispatchers.get(R.id.volume_sub);
    }
 
    public ButtonDispatcher getRecentsButton() {
        return mButtonDispatchers.get(R.id.recent_apps);
    }
 
    public ButtonDispatcher getMenuButton() {
        return mButtonDispatchers.get(R.id.menu);
    }
 
    public ButtonDispatcher getBackButton() {
        return mButtonDispatchers.get(R.id.back);
    }
 
    public ButtonDispatcher getHomeButton() {
        return mButtonDispatchers.get(R.id.home);
    }
 
    public ButtonDispatcher getImeSwitchButton() {
        return mButtonDispatchers.get(R.id.ime_switcher);
    }
 
    public ButtonDispatcher getAccessibilityButton() {
        return mButtonDispatchers.get(R.id.accessibility_button);
    }

Android 即在此类中完成对 Button图标 的选择 . 

若需要展示/隐藏对应的 功能选项时,需要在此处修改:


private void prepareNavigationBarView() {
        mNavigationBarView.reorient();
 
        ButtonDispatcher recentsButton = mNavigationBarView.getRecentsButton();
        recentsButton.setOnClickListener(this::onRecentsClick);
        recentsButton.setOnTouchListener(this::onRecentsTouch);
        recentsButton.setLongClickable(true);
        recentsButton.setOnLongClickListener(this::onLongPressBackRecents);
 
        ButtonDispatcher backButton = mNavigationBarView.getBackButton();
        backButton.setLongClickable(true);
        backButton.setOnLongClickListener(this::onLongPressBackRecents);
 
        ButtonDispatcher homeButton = mNavigationBarView.getHomeButton();
        homeButton.setOnTouchListener(this::onHomeTouch);
        homeButton.setOnLongClickListener(this::onHomeLongClick);
 
        ButtonDispatcher accessibilityButton =         mNavigationBarView.getAccessibilityButton();
        accessibilityButton.setOnClickListener(this::onAccessibilityClick);
        accessibilityButton.setOnLongClickListener(this::onAccessibilityLongClick);
        updateAccessibilityServicesState(mAccessibilityManager);
 
        ButtonDispatcher screenshotButton = mNavigationBarView.getScreenshotButton();
        screenshotButton.setOnClickListener(this:: screenshotClick);
        screenshotButton.setOnTouchListener(this:: screenshotTouch);
        boolean isShow=Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREENSHOT_BUTTON_SHOW, 1) == 1;
        if(isShow){
            screenshotButton.setVisibility(View.VISIBLE);
        }else{
            screenshotButton.setVisibility(View.GONE);
        }
 
        ButtonDispatcher volumeAddButton=mNavigationBarView.getVolumeAddButton();
        ButtonDispatcher volumeSubButton=mNavigationBarView.getVolumeSubButton();
        boolean isShowVolumeButton="true".equals(SystemProperties.get("ro.rk.systembar.voiceicon","true"));
        if(isShowVolumeButton){
            volumeAddButton.setVisibility(View.VISIBLE);
            volumeSubButton.setVisibility(View.VISIBLE);
        }else{
            volumeAddButton.setVisibility(View.GONE);
            volumeSubButton.setVisibility(View.GONE);
        }
        if (getContext().getResources().getConfiguration().smallestScreenWidthDp < 400) {
            volumeAddButton.setVisibility(View.GONE);
            volumeSubButton.setVisibility(View.GONE);
        }
    }

可以将对应的Button 设置 setVisibility(View.GONE / View.INVISIBLE / View.VISIBLE); 

 当加上setVisibility时,UI界面还没显示时,需要注意config.xml中是否有写进去需要的Button . 

frameworks\base\packages\SystemUI\res\values\config.xml


<string name="config_navBarLayout" translatable="false">left;volume_sub,back,home,recent,volume_add;right</string>

需要注意的是,config中配置的顺序 即为 UI的显示顺序 .

提一嘴,如果需要用到屏蔽状态栏以及任务栏,可以将如下status_bar_height 的高度设为0.

 frameworks\base\core\res\res\values\dimens.xml


    <!-- Height of the status bar -->
    <dimen name="status_bar_height">0dp</dimen>

到此这篇关于Android导航栏功能项的显示与屏蔽介绍的文章就介绍到这了,更多相关Android导航栏内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯