Android:从 Activity 设置 windowIsTranslucent

问题描述 投票:0回答:5

我正在开发一个库,我必须以编程方式设置窗口背景,并且不能使用自定义样式 XML。这个想法是,实现该库的用户可以设置他想要的任何主题 - 我只需要使背景透明。因此小部件的所有样式都将保持不变。

我尝试了一些窗口标志,例如

WindowManager.LayoutParams.FLAG_DIM_BEHIND
WindowManager.LayoutParams.FLAG_BLUR_BEHIND
,但它们都不起作用。

我找到的每个解决方案都是基于样式 xml 文件。

有没有办法直接从代码中设置windowIsTranslucent?

提前致谢,罗曼

android window transparent
5个回答
1
投票

不,这是不可能的。

只能在您的主题中设置

windowIsTranslucent

建议;创建您自己的主题,其他人可以覆盖。


0
投票
在您的活动开始之前,

android:windowIsTranslucent
android:windowIsFloating
android:windowNoDisplay
都会被读取一次。因此,当您运行自己的代码时,为时已晚。

http://osxr.org:8080/android/source/frameworks/base/services/java/com/android/server/am/ActivityRecord.java#0399


0
投票

我用过这个

@Override
protected void onCreate(Bundle savedInstanceState) {
    processSetTheme(this);
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    getWindow().setBackgroundDrawableResource(R.color.realTranslucent);
    if (Build.VERSION.SDK_INT>=19){
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }
    super.onCreate(savedInstanceState);

<color name="realTranslucent">#00000000</color>

0
投票

从 API 级别 30 开始,现在有一个

setTranslucent
方法:

将活动(尤其是具有

R.attr.windowIsTranslucent
R.attr.windowIsFloating
属性的活动)转换为全屏不透明活动,或将其从不透明转换回半透明。

文档


-1
投票

这里有一个技巧: 首先,您使用半透明活动。 然后你可以设置activity的布局文件顶部布局的背景。

© www.soinside.com 2019 - 2024. All rights reserved.