android - Comment créer une activité transparente sur Android?




9 Answers

Ajoutez le style suivant dans votre fichier res/values/styles.xml (si vous n'en avez pas, créez-le.) Voici un fichier complet:

<?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>

(La valeur @color/transparent est la valeur de couleur #00000000 que je mets dans le fichier res/values/color.xml Vous pouvez aussi utiliser @android:color/transparent dans les versions ultérieures d'Android.)

Appliquez ensuite le style à votre activité, par exemple:

<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>

Je veux créer une activité transparente en plus d'une autre activité.

Comment puis-je atteindre cet objectif?




Avec la bibliothèque "AppCompat" ou "Android Design Support Library", c'est un peu différent:

Dans le fichier 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>

Dans le fichier AndroidManifest.xml:

<activity>
    android:name=".WhateverNameOfTheActivityIs"
    android:theme="@style/Theme.AppCompat.Translucent"
    ...
</activity>



Affectez le thème translucide à l'activité que vous souhaitez rendre transparente dans le fichier manifeste Android de votre projet:

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



Je l'ai atteint sur 2.3.3 en ajoutant juste android:theme="@android:style/Theme.Translucent" dans la balise d'activité dans le manifeste.

Je ne connais pas les versions inférieures ...




Dans mon cas, je dois définir le thème sur le runtime en Java en fonction de certaines conditions. J'ai donc créé un thème avec style (similaire aux autres réponses):

<?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>

Puis en Java je l'ai appliqué à mon activité:

@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);


    }

Souvenez-vous d'un point important ici: Vous devez appeler la fonction setTheme() avant super.onCreate(savedInstanceState); . J'ai manqué ce point et j'ai bloqué pendant 2 heures, pensant que mon thème ne se reflète pas au moment de l'exécution.




Le moyen le plus simple que j'ai trouvé est de définir le thème de l'activité dans AndroidManifest sur android:theme="@android:style/Theme.Holo.Dialog" .

Ensuite, dans la méthode onCreate de l'activité, appelez getWindow().setBackgroundDrawable(new ColorDrawable(0)); .




Attribuez-lui le thème Translucide

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



Remarque 1: Dans Drawable folder, créez test.xml et copiez le code suivant

   <?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>

// Note: Les coins et la forme sont selon votre condition.

// Note 2: Créer un fichier 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>



Ajoutez simplement la ligne suivante à la balise d'activité dans votre fichier manifeste qui doit être transparente.

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



Related

android android-activity transparent