Comment créer une activité transparente sur Android?

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

Comment puis-je y parvenir?

798
demandé sur Peter Mortensen 2010-02-01 16:28:02

18 réponses

ajoutez le style suivant dans votre fichier res/values/styles.xml (si vous n'en avez pas, créez-le. Voici un dossier 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 mis dans le fichier res/values/color.xml . Vous pouvez également utiliser @android:color/transparent dans les versions ultérieures D'Android.)

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

<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
1244
répondu gnobal 2017-04-28 22:23:56

comme ceci:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
180
répondu yanchenko 2010-02-01 14:47:54

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

dans les 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 L'AndroidManifest.xml:

<activity>
    android:name=".WhateverNameOfTheActivityIs"
    android:theme="@style/Theme.AppCompat.Translucent"
    ...
</activity>
86
répondu Andrey 2016-07-28 08:30:50

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.

33
répondu Deepak Swami 2017-11-27 00:51:45

assignez le thème translucide à l'activité que vous voulez 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" />
26
répondu Jigar Pandya 2017-04-28 22:31:24

je voulais ajouter à cela un peu comme je suis un nouveau développeur Android. La réponse acceptée est bonne, mais j'ai eu des ennuis. Je ne savais pas comment ajouter la couleur aux couleurs.fichier xml. Voici comment faire:

les couleurs.xml

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

dans mes couleurs originales.fichier xml j'avais la balise "drawable":

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

et donc j'ai fait ça 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 mentionner que bien aider quelqu'un d'autre.

15
répondu Camille Sévigny 2017-04-28 22:25:30

Je l'ai réalisé sur 2.3.3 en ajoutant simplement android:theme="@android:style/Theme.Translucent" dans l'étiquette d'activité dans le manifeste.

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

14
répondu androabhay 2017-04-28 22:26:07

dans mon cas, je dois définir le thème sur l'exécution en java en fonction de certaines conditions. J'ai donc créé un thème en style (similaire à d'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);


    }

Souviens d'un point Important ici: Vous devez appeler la "151920920 de la fonction" avant super.onCreate(savedInstanceState); . J'ai manqué ce point et je suis resté planqué pendant 2 heures, en pensant Pourquoi mon thème n'est pas reflété à moment de l'exécution.

10
répondu Gem 2017-05-13 09:18:25

dans la fonction onCreate , sous la fonction setContentView , ajouter cette ligne:

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
8
répondu Leebeedev 2017-04-28 22:32:17

il suffit de laisser l'image d'arrière-plan de l'activité être transparente. Ou ajouter le thème dans le fichier XML:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
7
répondu jian 2017-04-28 22:26:40

la façon la plus facile que j'ai trouvé est de mettre le thème de l'activité dans le AndroidManifest à android:theme="@android:style/Theme.Holo.Dialog" .

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

6
répondu Drew Leonce 2017-04-28 22:27:56

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

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

mais vous devez également mettre votre vue principale dans l'activité à invisible. Sinon, l'arrière-plan sera invisible tandis que toutes les vues y seront visibles.

4
répondu Pavel Kataykin 2017-04-28 22:37:12

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

  1. dans le fichier du Manifeste, je viens d'ajouter le code ci-dessous dans l'étiquette activity .

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
    
  2. et je viens de définir le fond de la mise en page principale de cette activité comme " #80000000 ". Comme

    android:background="#80000000"
    

It fonctionne parfaitement pour moi.

3
répondu Md Sufi Khan 2017-04-28 22:29:45

assignez-lui le thème translucide

android:theme="@android:style/Theme.Translucent.NoTitleBar"
2
répondu saurabh 2013-07-25 06:53:46

Note 1: dans le dossier étirable créer test.xml et copier 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 conformes à vos exigences.

/ / 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
répondu ManiTeja 2015-12-11 09:32:27

il y a deux façons:

  1. Utilisant Le Thème.NoDisplay
  2. Utilisant Le Thème.Translucide.NoTitleBar

en utilisant Theme.NoDisplay fonctionnera toujours... mais seulement sur les appareils Android plus anciens. Sur Android 6.0 et plus, en utilisant le thème.NoDisplay sans appel finish() dans onCreate() (or, technically, before onResume()) sera crash de votre application. C'est pourquoi la recommandation est d'utiliser Theme.Translucent.NoTitleBar , qui ne souffre pas de cette limitation ."

1
répondu Shubham Soni 2018-05-11 18:42:52

il suffit d'ajouter la ligne suivante à l'étiquette d'activité dans votre fichier manifeste qui doit avoir l'air transparent.

android:theme="@android:style/Theme.Translucent"
0
répondu Kanagalingam 2017-04-28 22:35:44

en plus des réponses ci-dessus:

pour éviter un crash lié à Oreo android 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" />
0
répondu Zafer Celaloglu 2018-09-26 09:55:01