Android对话框活动主题:android:theme vs setTheme()

时间:2015-08-13 15:11:05

标签: java android android-activity dialog themes

我正在设置一个像对话框一样的Activity,这是我的代码:

public class TetsDialog extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.setTheme(android.R.style.Theme_Dialog);
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test);
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.RED));
    }
}

这是我在上面的代码中获得的。 enter image description here

但是如果我在活动的清单条目中添加它

android:theme="@android:style/Theme.Dialog"

我明白了: enter image description here

所以我想要的是,具有透明背景的活动,如第二张图片,但只有setTheme()。为什么这两个android:themesetTheme(android.R.style.Theme_Dialog)都没有相同的结果?

关于制作透明的对话活动有很多问题(即使我发现谷歌代码上的问题与我的问题类似,但我丢失了链接),但没有一个有正确答案。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我前段时间研究过Android代码,发现:

  • 在清单中设置主题时,某些属性可用于在活动构建之后以及在添加到窗口之前进行配置。 - >像透明活动这样的一些属性只能通过这种方式工作。

  • 虽然按代码设置主题,但您只能调用onCreate,而在那时,活动已完成初始工作并被分配到一个窗口(尚未附加) - >所以像透明这样的一些属性不会起作用。

所以基本上,通过xml和代码设置主题将返回不同的结果。而且我认为没有办法通过它 如果我错了,请随意纠正我。