How do I create a transparent Activity on Android?
我想在另一个活动之上创建一个透明的活动。
我怎样才能做到这一点?
在您的
1 2 3 4 5 6 7 8 9 10 11 | <?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> |
(值
然后将样式应用于您的活动,例如:
1 2 | ... </activity> |
就像这样:
1 |
对于"AppCompat"库或"Android设计支持库",它有点不同:
在styles.xml中:
1 2 3 4 5 6 7 8 | <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中:
1 2 3 4 5 | <activity android:name=".WhateverNameOfTheActivityIs" android:theme="@style/Theme.AppCompat.Translucent"> ... </activity> |
在清单中这样声明您的活动:
1 2 3 | <activity android:name=".yourActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/> |
并在布局中添加透明背景。
将半透明主题分配给要在项目的Android清单文件中使其透明的活动:
1 2 3 | <activity android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> |
我想补充一下,因为我也是一个新的Android开发者。公认的答案很好,但我确实遇到了一些麻烦。我不知道如何将颜色添加到colors.xml文件中。这是应该怎么做的:
颜色XML1 2 3 4 5 | <?xml version="1.0" encoding="utf-8"?> <resources> <color name="class_zero_background">#7f040000</color> <color name="transparent">#00000000</color> </resources> |
在我原来的colors.xml文件中,我有一个标签"drawable":
1 | <drawable name="class_zero_background">#7f040000</drawable> |
所以我也为颜色做了这些,但我不理解"@color/"引用意味着在XML中查找标记"color"。我想我也应该提这个来帮助其他人。
我在2.3.3中通过在清单的活动标签中添加
我不知道低版本…
在我的例子中,我必须根据一些条件在Java的运行时设置主题。所以我以风格(类似于其他答案)创建了一个主题:
1 2 3 4 5 6 7 8 9 10 11 | <?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中,我把它应用到我的活动中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @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); } |
记住这里的一个重要点:必须在
只需让活动背景图像透明即可。或者在XML文件中添加主题:
1 |
在onCreate函数的setContentView下,添加此行:
1 | getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); |
我发现最简单的方法是在AndroidManifest中将活动的主题设置为
然后在活动的onCreate方法中,调用
对于对话活动,我使用:
1 | getWindow().getDecorView().setBackgroundResource(android.R.color.transparent); |
但您还需要将活动中的主视图设置为不可见。否则,背景将不可见,而其中的所有视图都将可见。
我只做了两件事,它使我的活动透明化。它们在下面。
在清单文件中,我刚刚在活动标记中添加了下面的代码。
1 | android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" |
我只是将该活动的主布局背景设置为"800000000"。喜欢
1 | android:background="#80000000" |
这对我来说非常有效。
为它指定半透明主题
1 | android:theme="@android:style/Theme.Translucent.NoTitleBar" |
有两种方法:
使用
除上述答案外:
避免与Android Oreo相关的活动崩溃
1 2 3 4 5 6 7 8 | <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" /> |
注1:在drawable文件夹中创建test.xml并复制以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?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> |
如果您使用的是
1 2 3 4 5 6 7 | <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> |
在
1 | android:theme="@style/TransparentCompat" |
有关详细信息,请阅读本文
只需将以下行添加到清单文件中需要看起来透明的活动标记中。
1 | android:theme="@android:style/Theme.Translucent" |