我想在另一个活动之上创建一个透明的活动。
我怎样才能做到这一点?
答案 0 :(得分:1298)
在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
是我放在#00000000
文件中的颜色值res/values/color.xml
。您也可以在以后的Android版本中使用@android:color/transparent
。)
然后将样式应用于您的活动,例如:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
答案 1 :(得分:187)
它是这样的:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
答案 2 :(得分:108)
使用“AppCompat”库或“Android设计支持库”,它有点不同:
在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>
答案 3 :(得分:35)
在清单中声明您的活动,如下所示:
<activity
android:name=".yourActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
为您的布局添加透明背景。
答案 4 :(得分:27)
将半透明主题分配给您希望在项目的Android清单文件中透明的活动:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
答案 5 :(得分:15)
我想稍微补充一点,因为我也是一名新的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”。我认为我也应该提到这一点,以帮助其他人。
答案 6 :(得分:15)
我在2.3.3上实现了它,只需在清单中的activity标记中添加android:theme="@android:style/Theme.Translucent"
。
我不知道较低版本......
答案 7 :(得分:11)
在我的情况下,我必须根据某些条件在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);
}
请记住一个重点:您必须在setTheme()
之前调用super.onCreate(savedInstanceState);
函数。我错过了这一点并且坚持了2个小时,想到为什么我的主题没有在运行时反映出来。
答案 8 :(得分:7)
让活动背景图片透明。或者在XML文件中添加主题:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
答案 9 :(得分:7)
在 onCreate 功能中,在 setContentView 下方,添加以下行:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
答案 10 :(得分:6)
我找到的最简单的方法是将AndroidManifest中活动的主题设置为android:theme="@android:style/Theme.Holo.Dialog"
。
然后在活动的onCreate方法中,调用getWindow().setBackgroundDrawable(new ColorDrawable(0));
。
答案 11 :(得分:5)
对于对话活动我使用:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
但您还需要将活动中的主视图设置为不可见。否则,背景将不可见,而其中的所有视图都将可见。
答案 12 :(得分:4)
只需添加
<item name="android:windowBackground">@android:color/transparent</item>
大功告成。
windowIsFloating
错了,这是一个 INSET 浮动窗口。
windowContentOverlay
仅与阴影有关。
windowIsTranslucent
是错误的,它没有做到,所以你可以看到后面的活动。 windowIsTranslucent 仅与动画过渡相关。
backgroundDimEnabled
使下面的活动变暗,但是,它在不同的设备上完全有问题。 (在某些情况下,除非您使用 windowIsFloating,否则它什么都不做;一般而言,行为完全有问题/不确定。)
colorBackgroundCacheHint
无关紧要,除非在非常旧的设备上,无论如何默认值为 null。
答案 13 :(得分:3)
我刚做了两件事,这让我的活动变得透明。他们在下面。
在清单文件中,我刚刚在活动标记中添加了以下代码。
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
我只是将该活动的主要布局背景设置为&#34; #80000000 &#34;。像
android:background="#80000000"
它对我很有用。
答案 14 :(得分:3)
除了以上答案:
避免与Android Oreo相关的活动崩溃
<style name="AppTheme.Transparent" parent="@style/Theme.AppCompat.Dialog">
<item name="windowNoTitle">true</item>
<item name="android:windowCloseOnTouchOutside">false</item>
</style>
<activity
android:name="xActivity"
android:theme="@style/AppTheme.Transparent" />
答案 15 :(得分:2)
为其指定半透明主题
android:theme="@android:style/Theme.Translucent.NoTitleBar"
答案 16 :(得分:2)
使用Theme.NoDisplay
仍可使用...但仅适用于较旧的Android设备。在Android 6.0及更高版本中,使用Theme.NoDisplay而不在finish()
中调用onCreate() (or, technically, before onResume())
将 崩溃 您的应用。这就是为什么建议要使用Theme.Translucent.NoTitleBar
,而不受此限制的影响。“
答案 17 :(得分:1)
注1:在Drawable文件夹中创建test.xml并复制以下代码
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke android:width="2dp" />
<gradient
android:angle="90"
android:endColor="#29000000"
android:startColor="#29000000" />
<corners
android:bottomLeftRadius="7dp"
android:bottomRightRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
//注意:角落和形状符合您的要求。
//注2:创建xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/test"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.09"
android:gravity="center"
android:background="@drawable/transperent_shape"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
答案 18 :(得分:0)
所有这些答案可能令人困惑,“透明”活动和“无UI”活动之间存在差异。
使用此:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
将使活动透明,但将阻止UI。
如果您要进行None UI活动而不是使用此功能:
android:theme="@android:style/Theme.NoDisplay"
答案 19 :(得分:0)
您可以从活动中删除setContentView(R.layout.mLayout)
并将主题设置为android:theme="@style/AppTheme.Transparent"
。检查此link以获得更多详细信息。
答案 20 :(得分:0)
伴随上述gnobal's解决方案,我必须在该特定活动的布局文件中将 alpha设置为0 ,因为在某些手机上(运行在Android 10上的Redmi Narzo 20 pro )屏幕的对话框部分显示了应该是透明的屏幕。由于某些原因,windowIsFloating导致了此问题,但是在删除它时,我没有得到所需的输出。
步骤:
在res> values> styles.xml
下的style.xml中添加以下内容 <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>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
使用上述样式设置活动的主题 AndroidManifest.xml
<activity
android:name=".activityName"
android:theme="@style/Theme.Transparent"/>
打开您应用了上述样式的活动的布局文件,并将其父布局元素的Alpha值设置为0(android:alpha="0"
)。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0"/>
</androidx.constraintlayout.widget.ConstraintLayout>
答案 21 :(得分:0)
如果您使用的是 AppCompatActivity
,则将其添加到styles.xml
<style name="TransparentCompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<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>
在manifest
文件中,您可以将此主题添加到活动代码中
android:theme="@style/TransparentCompat"
有关更多详细信息,请阅读此article
答案 22 :(得分:0)
把它放在 style.xml 中
<item name="android:windowBackground">@android:color/transparent</item>
或在清单中添加
<activity android:name=".usual.activity.Declaration"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />