我正在开发一个库,我必须以编程方式设置窗口背景,并且不能使用自定义样式 XML。这个想法是,实现该库的用户可以设置他想要的任何主题 - 我只需要使背景透明。因此小部件的所有样式都将保持不变。
我尝试了一些窗口标志,例如
WindowManager.LayoutParams.FLAG_DIM_BEHIND
和 WindowManager.LayoutParams.FLAG_BLUR_BEHIND
,但它们都不起作用。
我找到的每个解决方案都是基于样式 xml 文件。
有没有办法直接从代码中设置windowIsTranslucent?
提前致谢,罗曼
不,这是不可能的。
只能在您的主题中设置
windowIsTranslucent
。
建议;创建您自己的主题,其他人可以覆盖。
android:windowIsTranslucent
、android:windowIsFloating
和 android:windowNoDisplay
都会被读取一次。因此,当您运行自己的代码时,为时已晚。
我用过这个
@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>
setTranslucent
方法:
将活动(尤其是具有
或R.attr.windowIsTranslucent
属性的活动)转换为全屏不透明活动,或将其从不透明转换回半透明。R.attr.windowIsFloating
这里有一个技巧: 首先,您使用半透明活动。 然后你可以设置activity的布局文件顶部布局的背景。