如何在Android上创build一个透明的Activity?
我想在另一个活动的顶部创build一个透明的Activity。
我怎样才能做到这一点?
在你的res/values/styles.xml
文件中添加下面的样式(如果你没有,创build它)。这是一个完整的文件:
<?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 android:name=".SampleActivity" android:theme="@style/Theme.Transparent"> ... </activity>
它是这样的:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
与“AppCompat”库或“Androiddevise支持库”有点不同:
在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>
在清单中声明您的活动,如下所示:
<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" />
我想补充一点,因为我也是一个新的Android开发者。 接受的答案很好,但是我遇到了一些麻烦。 我不知道如何将颜色添加到colors.xml文件。 这是应该如何做的:
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"
来实现它。
我不知道更低版本
在我的情况下,我必须根据一些条件在java中设置运行时的主题。 所以我创build了一个风格的主题(类似于其他答案):
<?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()
函数super.onCreate(savedInstanceState);
。 我错过了这一点,并停留了2个小时,思考为什么我的主题没有在运行时反映出来。
只要让活动背景图像透明即可。 或者在XML文件中添加主题:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
在onCreate函数中,在setContentView的下面添加以下行:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
我find的最简单的方法是将AndroidManifest中的活动主题设置为android:theme="@android:style/Theme.Holo.Dialog"
。
然后在activity的onCreate方法中,调用getWindow().setBackgroundDrawable(new ColorDrawable(0));
。
对于对话活动,我使用这个:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
但是,您还需要将活动中的主视图设置为不可见。 否则,背景将不可见,而其中的所有视图都将可见。
将其指定为半透明主题
android:theme="@android:style/Theme.Translucent.NoTitleBar"
我只做了两件事,这使我的活动变得透明。 他们在下面。
-
在清单文件中,我只是在activity标签中添加了下面的代码。
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
-
我只是将该活动的主要布局的背景设置为“ #80000000 ”。 喜欢
android:background="#80000000"
它完全适合我。
注意1:在Drawable文件夹中创buildtest.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>
//注意:angular落和形状是根据您的要求。
//注2:创buildxml:
<?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>
只需将以下行添加到清单文件中需要看起来透明的活动标记中即可。
android:theme="@android:style/Theme.Translucent"