android 下拉状态栏(SystemUI)常见修改记录

  • 摘要:下拉状态栏:1.下拉状态栏的亮度条:frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.javamBrightnessView对应布局文件:quick_settings_brightness_dialog.xml2.滑动亮度条后过渡到桌面的亮度条frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phon
  • 下拉状态栏:

    1.下拉状态栏的亮度条:

    frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java

    mBrightnessView

    对应布局文件:quick_settings_brightness_dialog.xml

    2.滑动亮度条后过渡到桌面的亮度条

     

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

    protected void inflateStatusBarWindow(Context context) { 
            mStatusBarWindow = (StatusBarWindowView) View.inflate(context, 
                    R.layout.super_status_bar, null); 
        }

    mStatusBarWindow

    对应布局文件:super_status_bar.xml

    布局文件中对应项:<includelayout="@layout/brightness_mirror" />

    3.亮度条中的滑动条样式修改

     

    frameworks/base/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java

    布局文件:status_bar_toggle_slider.xml

    4.下拉状态栏的图标块

    有两处

    /frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/***Tile.java

    对应的Vector矢量图文件命名为ic_qs_xxx.xml

    AirplaneModeTile:飞行模式,默认有动画的。用图片替换要把动画在代码中注释掉。

    BatteryTile:电池。用BatteryMeterDrawable自定义view画出来的。

    BluetoothTile:蓝牙

    CastTile:投射

    CellularTile:移动数据网络,无sim卡

    ColorInversionTile:反色

    DataSaverTile:流量节省程序

    DataUsageDetailView:默认没显示,数据使用细节

    DndTile:勿扰donot disturb

    FlashlightTile:手电筒

    HotspotTile:热点

    IntentTile:默认没显示,不知道长啥样

    LocationTile:位置信息

    RotationLockTile:自动旋转,纵向

    ScreenShotTile:截图

    UserDetailItemView:默认没显示,不知道长啥样

    UserDetailView:默认没显示,不知道长啥样

    UserTile:默认没显示,不知道长啥样

    WifiTile:Wlan

    WorkModeTile:默认没显示,不知道长啥样

    还有MTK的

    /frameworks/base/packages/SystemUI/src/com/mediatek/systemui/qs/tiles/***Tile.java

    HotKnotTile

    ApnSettingsTile

    DualSimSettingsTile

    MobileDataTile

    QsIconWrapper

    SimDataConnectionTile

    5.增删下拉状态栏的图标块

    frameworks/base/packages/SystemUI/res/values/config.xml中修改

    <!--The default tiles to display in QuickSettings -->
    <!--M: add hotknot tile -->
    <stringname="quick_settings_tiles_default" translatable="false">
    wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotknot,screenshot
    </string>

    6.WLAN图标块点击后信号强度

     

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java

        private static final int[] ICONS = { 
            R.drawable.ic_qs_wifi_full_0, 
            R.drawable.ic_qs_wifi_full_1, 
            R.drawable.ic_qs_wifi_full_2, 
            R.drawable.ic_qs_wifi_full_3, 
            R.drawable.ic_qs_wifi_full_4, 
        };

    7.修改手机信号强度图

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java

        static final int[][] QS_TELEPHONY_SIGNAL_STRENGTH = { 
            { R.drawable.ic_qs_signal_0, 
              R.drawable.ic_qs_signal_1, 
              R.drawable.ic_qs_signal_2, 
              R.drawable.ic_qs_signal_3, 
              R.drawable.ic_qs_signal_4 }, 
            { R.drawable.ic_qs_signal_full_0, 
              R.drawable.ic_qs_signal_full_1, 
              R.drawable.ic_qs_signal_full_2, 
              R.drawable.ic_qs_signal_full_3, 
              R.drawable.ic_qs_signal_full_4 } 
        };
     

    8.单条通知栏ui修改

     

    修改两个位置:

    位置1:

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java

    protectedvoid onFinishInflate() {}中

    修改下面两句

    mBackgroundNormal.setCustomBackground

    mBackgroundDimmed.setCustomBackground

    同时让下面两个方法为空

    privatevoid updateOutlineAlpha() {}

    publicvoid setFakeShadowIntensity(float shadowIntensity, floatoutlineAlpha, int shadowYEnd,

    intoutlineTranslation) {}

    位置2:

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java

    这个是个ViewGroup,它在onDraw里面还画了次背景。需要干掉这个背景。

    让下面这个方法为空。

    privatevoid updateBackground() {}

    protectedvoid onDraw(Canvas canvas) {}中注销掉下面这句

    canvas.drawRect(0,mCurrentBounds.top, getWidth(), mCurrentBounds.bottom,mBackgroundPaint);

    修改后效果:

     

    9.多条通知栏的背景修改

     

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView

    默认背景就是当前界面截图加了个黑色透明度。

    这个要谨改,因为会影响到按下power键唤醒屏幕时候的锁屏。如果把背景设成黑色,可能power键唤醒屏幕后,多条通知栏的背景是黑的。

    10.删除修改显示布局边界,GPU呈现模式分析,Nearby

     

    GPU呈现模式分析,显示布局边界都是packages/apps/Settings中的

    在AndroidManifest.xml中可以找到

    	<service 
                    android:name=".qstile.DevelopmentTiles$ShowLayout" 
                    android:label="@string/debug_layout" 
                    android:icon="@drawable/tile_icon_show_layout" 
                    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" 
                    android:enabled="false"> 
                <intent-filter> 
                    <action android:name="android.service.quicksettings.action.QS_TILE" /> 
                </intent-filter> 
            </service> 
            <service 
                    android:name=".qstile.DevelopmentTiles$GPUProfiling" 
                    android:label="@string/track_frame_time" 
                    android:icon="@drawable/tile_icon_graphics" 
                    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" 
                    android:enabled="false"> 
                <intent-filter> 
                    <action android:name="android.service.quicksettings.action.QS_TILE" /> 
                </intent-filter> 
            </service>

    label对应的string在framework/base/packages/SettingsLib中

    icon对应的drawable在packages/apps/Settings中

    packages/apps/Settings/src/com/android/settings/qstile/DevelopmentTiles.java

    Nearby是谷歌的玩意,修改的话也能修改,就是加判定在TileQueryHelper.java中修改,当然上面的

    GPU呈现模式分析,显示布局边界也可以这么修改。只不过不建议用这种方式修改。

    删除这三个东西:

    frameworks/base/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java

        private class QueryTilesTask extends 
                AsyncTask<Collection<QSTile<?>>, Void, Collection<TileInfo>> {}
    		doInBackground{}中
                List<ResolveInfo> services = pm.queryIntentServicesAsUser( 
                        new Intent(TileService.ACTION_QS_TILE), 0, ActivityManager.getCurrentUser());
    这句修改为
    			//lqp 
                	//List<ResolveInfo> services = pm.queryIntentServicesAsUser( 
                   //     new Intent(TileService.ACTION_QS_TILE), 0, ActivityManager.getCurrentUser()); 
    		List<ResolveInfo> services = new ArrayList<ResolveInfo>(); 

    11.为原生android下拉状态栏新增自动调节亮度开关

     

    alps/device/mediatek/mt6735/bird.mk

    alps/frameworks/base/packages/SystemUI/bird/res/layout/ui_icon_qs_brightness_dialog.xml

    alps/frameworks/base/packages/SystemUI/bird/res/values-zh-rCN/strings.xml

    alps/frameworks/base/packages/SystemUI/bird/res/values/strings.xml

    alps/frameworks/base/packages/SystemUI/bird/src/com/bird/systemui/BirdFeatureOption.java

    alps/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml

    alps/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java

    .../base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

    alps/packages/apps/Settings/src/com/android/settings/DisplaySettings.java

    三个地方需要同步,设置中的显示DisplaySettings.下拉状态栏的图标处QSPanel,点击滑条后的PhoneStatusBar。

    如何同步? 使用观察者模式。

    在Switch进行操作后需要变更Settings.System.SCREEN_BRIGHTNESS_MODE值。在值变化后Switch控件状态需要同步变化。

    QSPanel.java中代码:

    //liuqipeng add 20170619 BUG #26165 
    import android.widget.CompoundButton; 
    import android.widget.ToggleButton; 
    import android.widget.Switch; 
    import android.provider.Settings; 
    import android.widget.CompoundButton.OnCheckedChangeListener; 
    import android.database.ContentObserver; 
    import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; 
    import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; 
    import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL; 
    //liuqipeng end 20170619
    public QSPanel(Context context, AttributeSet attrs) {
    		//liuqipeng add 20170619 BUG #26165 
    		if(BirdFeatureOption.BIRD_SHOW_AUTO_BRIGHT_SWITCH){ 
    			View mAutoBrightRl=findViewById(R.id.auto_bright_rl); 
    			mAutoBrightRl.setVisibility(View.VISIBLE); 
    			Switch mAutoBright=(Switch)findViewById(R.id.auto_bright_switch); 
    		    int brightnessMode = Settings.System.getInt(context.getContentResolver(), 
    		            SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
    			mAutoBright.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL); 
    			mAutoBright.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    			 
    				@Override 
    				public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    				    Settings.System.putInt(context.getContentResolver(), SCREEN_BRIGHTNESS_MODE, 
    				            isChecked ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL); 
    				} 
    			}); 
    			ContentObserver BrightnessMode = new ContentObserver(new Handler()) { 
    				@Override 
    				public void onChange(boolean selfChange) { 
    					super.onChange(selfChange); 
    					int brightnessMode = Settings.System.getInt(context.getContentResolver(), 
    							SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
    					mAutoBright.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL); 
    				} 
    			}; 
    			context.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE),true, BrightnessMode); 
    		} 
    }
    		//liuqipeng end 20170619
### 回答1: 您好,针对您的问题,如果Android设备的状态栏显示的图标过多导致空间不足,可以考虑以下几种处理方法: 1. 删除一些不必要的状态栏图标,例如通知、铃声等。在“设置”中找到相应的选项,将不需要显示的状态栏图标取消勾选即可。 2. 改变状态栏图标的大小。在“设置”中找到相应的选项,调整状态栏图标的大小以便更多的图标能够显示在状态栏上。 3. 使用第三方的状态栏管理工具,例如Xposed框架中的“GravityBox”模块,或者其他第三方应用程序。这些工具可以帮助您自定义状态栏,以便更好地管理状态栏图标。 希望这些方法可以帮助您解决问题。如果您需要更多帮助,请告诉我。 ### 回答2: 当Android设备非完全下拉状态时,通常情况下状态栏图标的空间是有限的。为了处理这个问题,Google采取了一些方法来扩大状态栏图标的可见性和可操作性。 首先,Google在Android系统中引入了通知折叠功能。当状态栏图标空间不够时,通知可以以折叠的方式显示,只显示重要的通知内容和图标。这样一方面可以节省空间,另一方面也保证了用户能够看到最重要的通知。 其次,Google还通过优化通知管理来处理状态栏图标空间不足的问题。Android系统允许用户对通知进行分类和优先级设置,用户可以自定义哪些通知显示在状态栏上,以及它们的顺序。这样用户可以根据自己的需求进行调整,只显示最关键的通知,避免状态栏图标空间占满。 此外,Google还提供了一些其他的解决方案。例如,系统可以根据通知的重要程度和用户的使用模式动态地调整状态栏图标的显示方式。有些应用程序还可以自定义自己的状态栏图标,通过图标的大小和设计来适应较小的空间。 综上所述,当Android设备处于非完全下拉状态时,Google通过采用通知折叠、通知管理优化等方法,扩大了状态栏图标的可见性和可操作性,以保证用户不会错过重要的通知信息。 ### 回答3: 当Android设备处于非完全下拉状态时,如果状态栏图标的空间不够显示所有图标Android系统采取了一些处理方法。谷歌(Google)提供的处理方法主要有以下几种: 1. 图标溢出:当状态栏图标空间不足时,较低优先级的图标可能会被隐藏或溢出到下拉状态栏中。用户可以下拉状态栏以查看被隐藏的图标,并进行相关操作。 2. 压缩图标:当图标数量过多时,系统会采取自动压缩图标的方式来节省空间。压缩后的图标可能会变小或以其他形式显示,以适应有限的空间。 3. 智能排列:Android系统还具备智能排列图标的功能,可以根据图标的重要性或使用频率自动调整图标的顺序和位置。重要的图标会被放置在更容易访问的位置,而较少使用的图标可能会被移至较难访问的位置。 4. 设置优先级:开发者可以为每个状态栏图标设置优先级,以告知系统图标显示的重要性。系统会根据优先级来决定在有限空间中显示哪些图标,以及显示的方式。 这些处理方法使得即使在有限的状态栏图标空间下,用户仍然能够方便地查看和操作重要的系统信息和通知。同时,开发者也可以根据自身应用的特性和需求,灵活地调整状态栏图标的显示方式和优先级。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值