我想在另一个Activity之上创建一个透明的Activity。
我该如何实现这一目标?
我想在另一个Activity之上创建一个透明的Activity。
我该如何实现这一目标?
在您的res/values/styles.xml
文件中添加以下样式(如果没有,请创建它)。这是完整的文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
值@color/transparent
是我放在res/values/color.xml
文件中的颜色值#00000000
。在后续的Android版本中,您也可以使用@android:color/transparent
。
然后将该样式应用于您的Activity,例如:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
<item name="android:windowBackground">@android:color/transparent</item>
这段代码。 - Someone Somewhereandroid:windowIsFloating
设置为true。删除此属性以表现为普通活动(在这种情况下,它将匹配android:style/Theme.Translucent.NoTitleBar
)。 - aromeroAppCompatActivity
派生而来的。所以parent="android:Theme"
导致我的应用程序崩溃。我只是把它移除了,就像魔法一样解决了问题。谢谢! - Atul它是这样的:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
在 styles.xml 文件中:
<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
<item name="android:background">#33000000</item> <!-- Or any transparency or color you need -->
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>
在 AndroidManifest.xml 文件中:<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
继承。 - tir38background
并在 windowBackground
中放置你喜欢的半透明颜色。 - hmac请在清单文件中像这样声明您的活动:
<activity
android:name=".yourActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
并将透明背景添加到您的布局。
在您的项目的Android清单文件中,将半透明主题分配给您想要使其透明的活动:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
在我的情况下,我需要根据一些条件在Java中运行时设置主题。因此,我创建了一个类似于其他答案的样式主题:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
然后我在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()
函数。我错过了这一点,卡了两个小时,才想到为什么我的主题在运行时没有反映。
只需添加
<item name="android:windowBackground">@android:color/transparent</item>
你完成了。
windowIsFloating
错误,这将使内嵌浮动窗口。
windowContentOverlay
只涉及阴影。
windowIsTranslucent
是错误的,它并没有让你看到后面的活动。windowIsTranslucent 只在动画过渡中有意义。
backgroundDimEnabled
会使下方的活动变暗,但是在不同设备上完全存在 bug(例如,在某些情况下,除非您使用 windowIsFloating,否则不起作用;通常行为完全存在 bug/不确定性)。
colorBackgroundCacheHint
只在极老的设备上才相关,而默认值是 null。
我也是一个新的Android开发者,想要补充一点内容。虽然已被接受的答案很好,但我还是遇到了些麻烦。我不确定如何在colors.xml文件中添加颜色。这里是正确的做法:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="class_zero_background">#7f040000</color>
<color name="transparent">#00000000</color>
</resources>
在我的原始colors.xml文件中,我有一个名为“drawable”的标签:
<drawable name="class_zero_background">#7f040000</drawable>
所以我对颜色也这样做了,但我不明白“@color/”引用的意思是在XML中查找“color”标签。 我认为我应该提一下这一点,以帮助其他人。
我在2.3.3上通过在清单文件中的activity标签中添加android:theme="@android:style/Theme.Translucent"
就实现了它。
我不知道更低版本的情况...
AppCompatActivity
。 - zackygauravgetWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));