android9 SystemUI定制2-初步改动

上文分析了状态栏的布局关系,本文主要记录一些基础的修改,如状态栏和qs背景修改、去除亮度调节条、返回直接关闭状态栏等比较细微散乱的修改。

1. 去除背景色

上文提到到背景前景色都是ScrimView,所以修改ScrimView即可:
ScrimView.java->onDraw()方法修改:

@Override
protected void onDraw(Canvas canvas) {
    
    
        //ScrimView:qs面板出来后的bg、fg蒙板
        if (mDrawAsSrc || mDrawable.getAlpha() > 0) {
    
    
            PorterDuff.Mode mode = mDrawAsSrc ? PorterDuff.Mode.SRC :                       		 PorterDuff.Mode.SRC_OVER;
            //改为绘制颜色透明色,去除灰色蒙板
            canvas.drawColor(Color.TRANSPARENT, mode);
         //以下为源码,注释即可
            /**if (!mHasExcludedArea) { 
               ...
            **/
     }
}

将蒙板绘制改为绘制透明色。

2. QS面板主体部分背景

对应 qs_panel.xml:

 <View
      android:id="@+id/quick_settings_background"
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:background="@drawable/qs_background_primary"
      android:elevation="4dp" />

修改qs_background_primary即可

<inset xmlns:android="http://schemas.android.com/apk/res/android">
       <shape>
         <!-- qs_background_dark 改为  8effffff   -->
           <solid android:color="#6effffff" />
         <!-- 圆角改为10dp   -->
           <corners android:radius="10dp" />
        </shape>
 </inset>

3.展开时状态栏背景色

同样是qs_panel.xml 文件

<View
     android:id="@+id/quick_settings_status_bar_background"
     android:layout_width="match_parent"
     android:layout_height="@*android:dimen/quick_qs_offset_height"
     android:background="#00000000"
     android:clipChildren="false"
     android:clipToPadding="false" />

修改background即可。

4.去除Header中的 “日期、手机状态图标栏”

在这里插入图片描述
即上图2的地方,对应quick_status_bar_expanded_header.xml

<include layout="@layout/quick_qs_status_icons"
    android:visibility="gone"/>
<com.android.systemui.qs.QuickQSPanel
 android:layout_marginTop="80dp"
 ....
 />

QuickQSPanel位于quick_qs_status_icons下方,隐藏它后相应加个marginTop。

5.默认展开全部

源码默认下拉时只显示header和通知栏部分(见4中的图片),修改为下拉直接完全展开快捷设置面板,NotificationPanelView.java->isOpenQsEvent直接返回true即可

private boolean isOpenQsEvent(MotionEvent event) {
    
    
      .....
      //直接返回true,展开整个qs面板
      return true;
}

6.点击返回直接关闭状态栏

原生效果是当前展示的是header时按下返回键关闭页面,如果当前是Qs面板完全展开则先关闭展开项,滑动到header,再次点返回才会关闭页面。
StatusBar.java修改onBackPressed方法:

public boolean onBackPressed() {
    
    
 ...
 if (mNotificationPanel.isQsExpanded()) {
    
    
      if (mNotificationPanel.isQsDetailShowing()) {
    
    
          mNotificationPanel.closeQsDetail();
      } else {
    
    
        // mNotificationPanel.animateCloseQs(); //只关闭qs展开部分           	 animateCollapsePanels(); //关闭整个qs面板
      }
     return true;
   }
    ....
}

7.上滑直接关闭菜单

原生在Qs面板上上滑时的表现与back键类似,先折叠到header,再次上滑才会关闭整个页面。NotificationPanelView.java修改onQsIntercept方法:

private boolean onQsIntercept(MotionEvent event) {
    
    
 ...
 case MotionEvent.ACTION_MOVE:
 ....
 //以下代码用于拦截事件,返回true则不会直接关闭整个面板,而是先折叠,显示header ,注释掉
 /**
 if (Math.abs(h) > mTouchSlop && Math.abs(h) > Math.abs(x - mInitialTouchX)
        && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) {
    mQsTracking = true;
    onQsExpansionStarted();
    notifyExpandingFinished();
    mInitialHeightOnTouch = mQsExpansionHeight;
    mInitialTouchY = y;
    mInitialTouchX = x;
    mIntercepting = false;
    mNotificationStackScroller.cancelLongPress();
    return true;
 }
 **/
      break;
 ....
}

注释MotionEvent.ACTION_MOVE中的拦截方法。

8.去掉亮度条

亮度调节条在QSPanel.java中创建,直接设置Visibility

public QSPanel(Context context, AttributeSet attrs) {
    
    
	...
	addView(mBrightnessView);
	//创建完隐藏掉
	mBrightnessView.setVisibility(GONE);
	....
}
@Override
public void onTuningChanged(String key, String newValue) {
    
    
    if (QS_SHOW_BRIGHTNESS.equals(key)) {
    
    
        // 这里会显示亮度条,注释掉
        // updateViewVisibilityForTuningValue(mBrightnessView,   	newValue);
    }
}

onTuningChanged方法也会显示亮度条,同样注释掉。

猜你喜欢

转载自blog.csdn.net/weixin_40652755/article/details/122843271
今日推荐