【问题标题】:Android: Set windowIsTranslucent from ActivityAndroid:从Activity设置windowIsTranslucent
【发布时间】:2012-11-27 14:22:51
【问题描述】:

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

我尝试了一些窗口标志,例如 WindowManager.LayoutParams.FLAG_DIM_BEHINDWindowManager.LayoutParams.FLAG_BLUR_BEHIND,但它们都不起作用。

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

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

提前致谢,罗曼

【问题讨论】:

  • 仅供参考,FLAG_DIM_BEHIND 用于对话框,而不再支持 FLAG_BLUR_BEHIND

标签: android window transparent


【解决方案1】:

不,这是不可能的。

只能在您的主题中设置windowIsTranslucent

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

【讨论】:

  • 但是有一个属性可用:android.R.attr.windowIsTranslucent - 有没有办法设置这个?
  • 不,这必须在主题中完成。它调整在运行时无法更改的窗口。因此,您需要在更改 windowIsTranslucent 属性之前重新启动活动/窗口。
【解决方案2】:

android:windowIsTranslucentandroid:windowIsFloatingandroid:windowNoDisplay 都只读取一次,甚至在您的活动开始之前。因此,当您运行自己的代码时,为时已晚。

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

【讨论】:

    【解决方案3】:

    我用过这个

    @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>
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        相关资源
        最近更新 更多