如何在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" 

我只做了两件事,这使我的活动变得透明。 他们在下面。

  1. 在清单文件中,我只是在activity标签中添加了下面的代码。

     android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" 
  2. 我只是将该活动的主要布局的背景设置为“ #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"