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

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

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

横屏的时候:有音量加减键[置顶] Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示_第1张图片

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

[置顶] Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示_第2张图片





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


首先我查看了\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)方法,修改如下

[置顶] Android系统移植与调试之------->如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示_第3张图片


 

 @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/

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


你可能感兴趣的:(android)