Android 13 SystemUI 禁止下拉快捷面板

com.android.systemui.statusbar.CommandQueue.panelsEnabled

    // TODO(b/118592525): add multi-display support if needed.
    public boolean panelsEnabled() {
        //加上你的逻辑判断,返回
        if(/*例如*/Utils.isPanelsEnabled()){
            return false;
        }
        final int disabled1 = getDisabled1(DEFAULT_DISPLAY);
        final int disabled2 = getDisabled2(DEFAULT_DISPLAY);
        return (disabled1 & StatusBarManager.DISABLE_EXPAND) == 0
                && (disabled2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) == 0
                && !ONLY_CORE_APPS;
    }
### 解决方案 为了使 Android SystemUI下拉通知栏能够全屏展开,需要深入理解并调整 `SystemUI` 中的相关布局文件和逻辑处理。具体来说: #### 修改核心类与资源文件 1. **修改布局文件** 需要编辑 `status_bar_expanded.xml` 文件来确保其高度可以动态适应屏幕尺寸[^2]。 ```xml <!-- frameworks/base/packages/SystemUI/res/layout/status_bar_expanded.xml --> <com.android.systemui.statusbar.phone.StatusBarWindowView android:id="@id/status_bar_window" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 将 wrap_content 改为 match_parent 或者指定最大高度 --> ... </com.android.systemui.statusbar.phone.StatusBarWindowView> ``` 2. **调整 ScrimView 行为** 对于遮罩层 (`ScrimView`) 可能会阻碍通知栏达到全屏效果的情况,需检查并适当调整该视图的高度属性或透明度设置[^3]。 ```java // frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY)); setAlpha(0f); // 如果不需要遮挡则可设为完全透明 } ``` 3. **优化手势交互逻辑** 若存在特定条件下阻止了全屏展开的手势响应,则应审查触摸事件分发机制中的条件判断语句,移除不必要的限制[^4]。 ```java // frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/PhoneStatusBar.java private boolean shouldExpandToFullscreen(MotionEvent event){ final float y = event.getY(); if(y > getHeight() * 0.8){ // 增加触发区域范围至接近底部边缘 return true; }else{ return false; } } public boolean onTouchEvent(MotionEvent event){ switch(event.getAction()){ case MotionEvent.ACTION_DOWN: mDownY = event.getRawY(); break; case MotionEvent.ACTION_MOVE: if(Math.abs(event.getRawY()-mDownY)>mTouchSlop && shouldExpandToFullscreen(event)){ expandNotificationsPanel(); // 调用此方法强制全屏展开 } break; default: break; } return super.onTouchEvent(event); } ``` 通过以上更改可以使 Android 设备上的下拉通知面板支持更灵活的展示方式,从而满足不同场景下的用户体验需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shigq-droid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值