我想在另一个活动之上创建一个透明的Activity。
我怎样才能做到这一点?
在清单中声明您的活动,如下所示:
并为您的布局添加透明背景。
我找到的最简单的方法是将AndroidManifest中的活动主题设置为android:theme="@android:style/Theme.Holo.Dialog"
。
然后在activity的onCreate方法中,调用getWindow().setBackgroundDrawable(new ColorDrawable(0));
。
为它指定半透明主题
android:theme="@android:style/Theme.Translucent.NoTitleBar"
我只做了两件事,这让我的活动变得透明。 他们在下面。
在清单文件中,我刚刚在活动代码中添加了以下代码。
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
我只是将该活动的主要布局背景设置为“ #80000000 ”。 喜欢
android:background="#80000000"
它非常适合我。
将半透明主题分配给要在项目的Android清单文件中透明的活动:
它是这样的:
在onCreate函数中,在setContentView下面添加以下行:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
在res/values/styles.xml
文件中添加以下样式(如果没有,请创建它。)这是一个完整的文件:
( @color/transparent
的值是我放在res/values/color.xml
文件中的颜色值#00000000
。您也可以在以后的Android版本中使用@android:color/transparent
。)
然后将样式应用于您的活动,例如:
...
在styles.xml中:
在AndroidManifest.xml中:
...
在我的情况下,我必须根据一些条件在java中设置运行时的主题。 所以我创建了一个主题风格(类似于其他答案):
然后在Java中我将它应用于我的活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
String email = getIntent().getStringExtra(AppConstants.REGISTER_EMAIL_INTENT_KEY);
if (email != null && !email.isEmpty())
{
// We have the valid email ID, no need to take it from user, prepare transparent activity just to perform bg tasks required for login
setTheme(R.style.Theme_Transparent);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
else
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dummy);
}
记住这里的一个重点 :你必须在super.onCreate(savedInstanceState);
之前调用setTheme()
函数super.onCreate(savedInstanceState);
。 我错过了这一点并且坚持了2个小时,想到为什么我的主题没有在运行时反映出来。
注意1:在Drawable文件夹中创建test.xml并复制以下代码
//注意:角落和形状符合您的要求。
//注2:创建xml:
只需将以下行添加到清单文件中需要透明的活动标记即可。
android:theme="@android:style/Theme.Translucent"
对于对话活动我使用:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
但是您还需要将活动中的主视图设置为不可见。 否则,背景将不可见,而其中的所有视图都将可见。
使用Theme.NoDisplay
仍然可以工作......但仅适用于较旧的Android设备。 在Android 6.0及更高版本中,使用Theme.NoDisplay而不在onCreate() (or, technically, before onResume())
调用finish()
onCreate() (or, technically, before onResume())
将使应用程序崩溃 。 这就是为什么建议使用Theme.Translucent.NoTitleBar
,它没有受到这种限制 。“
除了以上答案:
避免android Oreo相关的活动崩溃
如果您正在使用AppCompatActivity
在styles.xml
添加它
在manifest
文件中,您可以将此主题添加到此类活动标记中
android:theme="@style/TransparentCompat"
有关详细信息,请阅读本文
所有这些答案可能会令人困惑,透明活动和无UI活动之间存在差异。
使用这个:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
将使活动透明但会阻止UI。
如果您想要一个无UI活动而不是使用此:
android:theme="@android:style/Theme.NoDisplay"
我想补充一点,因为我也是一名新的Android开发人员。 接受的答案很棒,但我遇到了一些麻烦。 我不知道如何在colors.xml文件中添加颜色。 这是应该怎么做:
#7f040000
#00000000
在我原来的colors.xml文件中,我有标签“drawable”:
#7f040000
所以我也为颜色做了这个,但我不明白“@ color /”引用意味着在XML中寻找标签“color”。 我认为我也应该提到这一点,以帮助其他人。
我在2.3.3上通过在清单中的activity标签中添加android:theme="@android:style/Theme.Translucent"
来实现它。
关于较低版本,我不知道......
只需让活动背景图片透明即可。 或者在XML文件中添加主题: