Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏

简介: 这两天由于一个客户的要求,将MID竖屏时候的状态条上的音量键去掉。所以尝试修改了一下,成功了,分享一下经验。 先看一下修改后的效果图,如下所示 。 横屏的时候:有音量加减键 竖屏的时候:音量加减键被去掉了  然后来说一说我的解决思路。

这两天由于一个客户的要求,将MID竖屏时候的状态条上的音量键去掉。所以尝试修改了一下,成功了,分享一下经验。

先看一下修改后的效果图,如下所示 。

横屏的时候:有音量加减键

竖屏的时候:音量加减键被去掉了






 然后来说一说我的解决思路。


首先我查看了\mx0831-0525\frameworks\base\packages\SystemUI\res\layout\system_bar.xml文件

<?xml version="1.0" encoding="utf-8"?>
<!--
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->

<!-- TabletStatusBarView extends FrameLayout -->
<com.android.systemui.statusbar.tablet.TabletStatusBarView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
    android:background="@drawable/system_bar_background"
    >
    
    <FrameLayout
        android:id="@+id/bar_contents_holder"
        android:layout_width="match_parent"
        android:layout_height="@*android:dimen/system_bar_height"
        android:layout_gravity="bottom"
        >
        <RelativeLayout
            android:id="@+id/bar_contents"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipChildren="false"
            >

            <!-- notification icons & panel access -->
            <include layout="@layout/system_bar_notification_area" 
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentRight="true"
                android:layout_marginTop="1dp"
                />

            <!-- navigation controls -->
            <LinearLayout
                android:id="@+id/navigationArea"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:orientation="horizontal"
                android:clipChildren="false"
                android:clipToPadding="false"
                >
                <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
                    android:layout_width="@dimen/navigation_key_width"
                    android:layout_height="match_parent"
                    android:src="@drawable/ic_sysbar_back"
                    systemui:keyCode="4"
                    android:contentDescription="@string/accessibility_back"
                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
                    />
                <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home"
                    android:layout_width="@dimen/navigation_key_width"
                    android:layout_height="match_parent"
                    android:src="@drawable/ic_sysbar_home"
                    systemui:keyCode="3"
                    android:contentDescription="@string/accessibility_home"
                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
                    />
                <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
                    android:layout_width="@dimen/navigation_key_width"
                    android:layout_height="match_parent"
                    android:src="@drawable/ic_sysbar_recent"
                    android:contentDescription="@string/accessibility_recent"
                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
                    />
               
				<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/sub"            
                     android:background="@drawable/sub_normal"
                     android:layout_width="70dip"
                     android:layout_height="match_parent"
                     android:visibility="invisible"
		     systemui:glowBackground="@drawable/ic_sysbar_highlight"
                     systemui:keyCode="25"
                     />  
				<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/add"           
                     android:background="@drawable/add_normal"
                     android:layout_width="70dip"
		     android:layout_height="match_parent"
                     android:visibility="invisible"
                     systemui:glowBackground="@drawable/ic_sysbar_highlight"
                     systemui:keyCode="24"
                     />    	
			
 <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/screenshot"
                    android:layout_width="@dimen/navigation_key_width"
                    android:layout_height="match_parent"
                    android:src="@drawable/ic_sysbar_screenshot"
                    android:contentDescription="@string/accessibility_screenshot"
                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
                    />			
					 
                <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
                    android:layout_width="@dimen/navigation_menu_key_width"
                    android:layout_height="match_parent"
                    android:src="@drawable/ic_sysbar_menu"
                    systemui:keyCode="82"
                    android:visibility="invisible"
                    android:contentDescription="@string/accessibility_menu"
                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
                    />
            </LinearLayout>

            <!-- fake space bar zone -->
            <com.android.systemui.statusbar.policy.EventHole android:id="@+id/fake_space_bar"
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:paddingLeft="8dip"
                android:paddingRight="8dip"
                android:layout_toRightOf="@+id/navigationArea"
                android:layout_toLeftOf="@+id/notificationArea"
                android:visibility="gone"
                />
        </RelativeLayout>
    </FrameLayout>

    <FrameLayout
        android:id="@+id/bar_shadow_holder"
        android:layout_width="match_parent"
        android:layout_height="@*android:dimen/system_bar_height"
        android:layout_gravity="bottom"
        >
        <!-- lights out shade -->
        <RelativeLayout
            android:id="@+id/bar_shadow"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FF000000"
            android:visibility="gone"
            >
            <ImageView
                android:id="@+id/dot0"
                android:layout_width="80dip"
                android:layout_height="48dip"
                android:src="@drawable/ic_sysbar_lights_out_dot_small"
                android:layout_alignParentLeft="true"
                android:layout_alignParentBottom="true"
                />
            <ImageView
                android:id="@+id/dot1"
                android:layout_width="80dip"
                android:layout_height="48dip"
                android:src="@drawable/ic_sysbar_lights_out_dot_large"
                android:layout_toRightOf="@+id/dot0"
                android:layout_alignParentBottom="true"
                />
            <ImageView
                android:id="@+id/dot2"
                android:layout_width="80dip"
                android:layout_height="48dip"
                android:src="@drawable/ic_sysbar_lights_out_dot_small"
                android:layout_toRightOf="@+id/dot1"
                android:layout_alignParentBottom="true"
                />
            <ImageView
                android:id="@+id/dot3"
                android:layout_width="80dip"
                android:layout_height="48dip"
                android:src="@drawable/ic_sysbar_lights_out_dot_small"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                />
        </RelativeLayout>
    </FrameLayout>
</com.android.systemui.statusbar.tablet.TabletStatusBarView>

在该文件中设置了add按钮(即音量加按钮)和sub按钮(即音量减按钮)的属性,android:visibility="invisible"设置为不可见

但是这样不能达到切换横竖屏的时候的消失和显示的效果。

然后我查看了mx0831-0525\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\tablet\TabletStatusBar.java文件

然后修改了该文件的 onConfigurationChanged(Configuration newConfig)方法,修改如下


 @Override
    protected void onConfigurationChanged(Configuration newConfig) {
        loadDimens();
	//edited by ouyangpeng start
	if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
			mVolumeUpButton.setVisibility(View.VISIBLE);
			mVolumeDownButton.setVisibility(View.VISIBLE);
		}else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
			mVolumeUpButton.setVisibility(View.GONE);
			mVolumeDownButton.setVisibility(View.GONE);
	}
        //edited by ouyangpeng 	end
        mNotificationPanelParams.height = getNotificationPanelHeight();
        WindowManagerImpl.getDefault().updateViewLayout(mNotificationPanel,
                mNotificationPanelParams);
        mRecentsPanel.updateValuesFromResources();
        mShowSearchHoldoff = mContext.getResources().getInteger(
                R.integer.config_show_search_delay);
        updateSearchPanel();

    }

这样就可以根据android横竖屏来动态设置音量键的消失和显示了。


==================================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

==================================================================================================


相关文章
|
24天前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
161 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
2月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
111 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
4月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
107 8
|
7月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
本文介绍了如何在基于Amlogic T972的Android 9.0系统上使用Platform平台驱动框架和设备树(DTS),实现设备与驱动的分离,并通过静态枚举在设备树中描述设备,自动触发驱动程序的加载和设备创建。
152 0
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
|
7月前
|
Android开发 C语言
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
这篇文章是关于如何在基于Amlogic T972的Android 9.0系统上,通过自动分配设备号和自动创建设备节点文件的方式,开发字符设备驱动程序的教程。
132 0
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
|
7月前
|
自然语言处理 Shell Linux
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
本文是关于在Amlogic安卓9.0平台上创建字符设备驱动的教程,详细介绍了驱动程序的编写、编译、部署和测试过程,并提供了完整的源码和应用层调用示例。
173 0
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
|
7月前
|
传感器 Android开发 芯片
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
本文是系列文章的第三篇,展示了如何在Android系统中利用现有的i2c bus驱动,通过编写设备树节点和应用层的控制代码,实现对基于i2c bus的Slaver设备(如六轴陀螺仪模块QMI8658C)的控制,而无需编写设备驱动代码。
115 0
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
|
Android开发 UED
Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放
原文地址:http://android.xsoftlab.net/training/managing-audio/index.html 引言 如果APP需要播放音频,允许用户可以控制音频的播放状态是很重要的一点。
1083 0
|
24天前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
|
1月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
65 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    Android实战经验之Kotlin中快速实现MVI架构
  • 10
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    66
  • 2
    android FragmentManager 删除所有Fragment 重建
    26
  • 3
    Android实战经验之Kotlin中快速实现MVI架构
    42
  • 4
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    42
  • 5
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    46
  • 6
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    161
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    55
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    73
  • 9
    Android历史版本与APK文件结构
    183
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54