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?
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>
comme ceci:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
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>
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.
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" />
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.
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...
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.
dans la fonction onCreate , sous la fonction setContentView , ajouter cette ligne:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
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" />
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));
.
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.
je viens de faire deux choses, et cela a rendu mon activité transparente. Ils sont ci-dessous.
-
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"
-
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.
assignez-lui le thème translucide
android:theme="@android:style/Theme.Translucent.NoTitleBar"
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>
il y a deux façons:
- Utilisant Le Thème.NoDisplay
- 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 ."
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"
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" />