web-dev-qa-db-fra.com

Comment créer une activité transparente sur Android?

Je souhaite créer une activité transparente par-dessus une autre activité.

Comment puis-je atteindre cet objectif?

826
UMAR

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 j'ai inscrite dans le fichier res/values/color.xml. Vous pouvez également utiliser @Android:color/transparent dans les versions ultérieures d'Android.)

Puis appliquez le style à votre activité, par exemple:

<activity Android:name=".SampleActivity" Android:theme="@style/Theme.Transparent">
...
</activity>
1277
gnobal

Ça va comme ça:

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

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

Dans le 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>
99
Andrey

Déclarez votre activité dans le manifeste comme ceci:

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

Et ajoutez un fond transparent à votre mise en page.

35
Deepak Swami

Attribuez 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" />
27
Jigar Pandya

Je voulais aussi ajouter quelque chose car je suis également un nouveau développeur Android. La réponse acceptée est excellente, mais j'ai eu quelques problèmes. Je ne savais pas comment ajouter de la couleur au fichier colors.xml. Voici comment cela devrait être fait:

couleurs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <color name="class_zero_background">#7f040000</color>
     <color name="transparent">#00000000</color>
</resources>

Dans mon fichier original colors.xml, j'avais la balise "drawable":

<drawable name="class_zero_background">#7f040000</drawable>

Et donc je l'ai fait pour la couleur aussi, mais je n'ai pas compris que la référence "@ color /" signifiait chercher la balise "color" dans le XML. J'ai pensé que je devrais en parler aussi pour aider quelqu'un d'autre.

15
Camille Sévigny

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

Je ne sais pas pour les versions inférieures ...

14
androabhay

Dans mon cas, je dois définir le thème du runtime en Java en fonction de certaines conditions. J'ai donc créé un thème dans le style (semblable 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);


    }

N'oubliez pas un Point important ici: Vous devez appeler la fonction setTheme() avant super.onCreate(savedInstanceState);. J'ai raté ce point et je suis resté bloqué pendant 2 heures, en me demandant pourquoi mon thème n'était pas reflété au moment de l'exécution.

10
Gem

Dans la fonction onCreate , sous la commande setContentView , ajoutez cette ligne:

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

Laissez simplement l'image de fond d'activité transparente. Ou ajoutez le thème dans le fichier XML:

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

Le moyen le plus simple que j'ai trouvé consiste à 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));.

6
Drew Leonce

Pour l'activité de dialogue, j'utilise ceci:

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

Mais vous devez également définir votre vue principale de l'activité sur invisible. Sinon, l'arrière-plan sera invisible et toutes les vues qu'il contient seront visibles.

4
Pavel Kataykin

Je viens de faire deux choses et cela a rendu mon activité transparente. Ils sont ci-dessous.

  1. Dans le fichier manifeste, je viens d’ajouter le code ci-dessous dans la balise activity .

    Android:theme="@Android:style/Theme.Translucent.NoTitleBar.Fullscreen"
    
  2. Et je viens de définir le fond de la disposition principale de cette activité comme " # 80000000 ". Comme

    Android:background="#80000000"
    

Cela fonctionne parfaitement pour moi.

3
Md Sufi Khan

Attribuez-lui le thème translucide

Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
2
saurabh

Il y a deux façons:

  1. Utilisation de Theme.NoDisplay
  2. Utilisation de Theme.Translucent.NoTitleBar

Utiliser Theme.NoDisplay fonctionnera toujours… mais uniquement sur les anciens appareils Android. Sur Android 6.0 et les versions ultérieures, utiliser Theme.NoDisplay sans appeler finish() dans onCreate() (or, technically, before onResume()) seracrashvotre application. C’est pourquoi la recommandation doit utiliser Theme.Translucent.NoTitleBar, qui ne souffre pas de cette limitation . ”

2
Shubham Soni

en plus des réponses ci-dessus:

éviter l'accident lié à Android Oreo sur l'activité

<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" />
2
Zafer Celaloglu

Remarque 1: dans le dossier Drawable, 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>

// Remarque: les coins et la forme sont conformes à vos besoins.

// Note 2: Créer 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>
1
ManiTeja

Toutes ces réponses peuvent prêter à confusion, il y a une différence entre l'activité Transparent et l'activité Aucune interface utilisateur.

En utilisant ceci:

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

Rendra l'activité transparente mais bloquera l'interface utilisateur.

Si vous voulez une activité d'interface utilisateur Aucune, utilisez ceci:

Android:theme="@Android:style/Theme.NoDisplay"

0
Kashkashio

Ajoutez simplement la ligne suivante à la balise d’activité de votre fichier manifeste qui doit paraître transparente.

Android:theme="@Android:style/Theme.Translucent"
0
Kanagalingam

Si vous utilisez AppCompatActivity, ajoutez ceci dans styles.xml

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

Dans le fichier manifest, vous pouvez ajouter ce thème à une balise d'activité comme ceci

Android:theme="@style/TransparentCompat"

pour plus de détails, lisez ceci article

0
Zohab Ali