自由窗口相关修改 AndroidQ
1 打开自由窗口相关配置
// frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public void retrieveSettings(ContentResolver resolver) {
// wugm: enable free form setting
Settings.Global.putInt(resolver, DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 1);
Settings.Global.putInt(resolver, DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES, 1);
final boolean freeformWindowManagement =
mContext.getPackageManager().hasSystemFeature(FEATURE_FREEFORM_WINDOW_MANAGEMENT)
|| Settings.Global.getInt(
resolver, DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0;
// 省略部分
}
<!--frameworks/base/core/res/res/values/config.xml-->
<bool name="config_freeformWindowManagement">true</bool>
2 窗口控制栏布局方式
标题是否直接悬浮显示在内容上,而不是下推内容
// frameworks/base/core/java/com/android/internal/widget/DecorCaptionView.java
public void setPhoneWindow(PhoneWindow owner, boolean show) {
mOwner = owner;
mShow = show;
if (SystemProperties.getBoolean("persist.sys.freeform", true)) {
owner.setOverlayWithDecorCaptionEnabled(false);
}
mOverlayWithAppContent = owner.isOverlayWithDecorCaptionEnabled();
if (mOverlayWithAppContent) {
mCaption.setBackgroundColor(Color.TRjavaANSPARENT);
} else {
mCaption.setBackgroundColor(Color.GRAY);
}
updateCaptionVisibility();
// 省略部分
}
3 自由窗口圆角切换
设置圆角矩形
// frameworks/base/core/java/com/android/internal/policy/DecorView.java
private static final ViewOutlineProvider FREEFORM_OUTLINE_PROVIDER = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 20);
outline.setAlpha(1f);
}
};
private void setDecorCaptionShade(DecorCaptionView view) {
setClipToOutline(true)

本文详细介绍了在Android Q系统中如何进行自由窗口的相关修改,包括打开自由窗口的配置、窗口控制栏的布局方式、自由窗口圆角的切换、限制窗口移动以及添加拖动边框等功能。
最低0.47元/天 解锁文章
1039





