提问



我想在另一个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>

其它参考1


它是这样的:


<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />

其它参考2


使用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


在清单中声明您的Activity,如下所示:


 <activity   
     android:name=".yourActivity"    
     android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>


并为您的布局添加透明背景。

其它参考4


将半透明主题分配给要在项目的Android清单文件中透明的Activity:


<activity
    android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

其它参考5


我想补充一点,因为我也是一名新的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。我认为我也应该提到这一点来帮助其他人出。

其它参考6


我在2.3.3中通过在清单中的Activity标签中添加android:theme="@android:style/Theme.Translucent"来实现它。


我不知道更低版本......

其它参考7


在我的情况下,我必须根据一些条件在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中我将它应用于我的Activity:


@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()函数。我错过了这一点并且坚持了2个小时,想到为什么我的主题没有在运行时反映出来。

其它参考8


onCreate 功能中,在 setContentView 下方,添加以下行:


getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

其它参考9


只需让Activity背景图片透明即可。或者在XML文件中添加主题:


<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />

其它参考10


我找到的最简单的方法是将AndroidManifest中的Activity主题设置为android:theme="@android:style/Theme.Holo.Dialog"


然后在Activity的on onCreate方法中,调用getWindow().setBackgroundDrawable(new ColorDrawable(0));

其它参考11


对于对话Activity我使用:


getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);


但您还需要将Activity中的主视图设置为不可见。否则,背景将不可见,而其中的所有视图都将可见。

其它参考12


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



  1. 在清单文件中,我刚刚在Activity标记中添加了以下代码。


    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
    

  2. 我只是将该Activity的主要布局背景设置为#80000000 。喜欢


    android:background="#80000000"
    



它非常适合我。

其它参考13


为它指定半透明主题


android:theme="@android:style/Theme.Translucent.NoTitleBar"

其它参考14


注意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>

其它参考15


有两种方式:




  1. 使用Theme.NoDisplay

  2. 使用Theme.Translucent.NoTitleBar



使用Theme.NoDisplay仍然有效......但仅适用于较旧的Android设备。在Android 6.0及更高版本中,使用Theme.NoDisplay而不调用onCreate() (or, technically, before onResume())中的finish() 崩溃 您的应用。这就是为什么建议要使用Theme.Translucent.NoTitleBar,而不受此限制的影响。


其它参考16


只需将以下行添加到清单文件中需要看起来透明的Activity标记即可。


android:theme="@android:style/Theme.Translucent"