Réponses:
Ajoutez le style suivant dans votre res/values/styles.xml
fichier (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 mise dans le res/values/color.xml
fichier. Vous pouvez également l'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>
android:windowIsFloating
la valeur true. Supprimez cette propriété pour vous comporter comme une activité normale (dans ce cas, elle correspondra android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
. Il en parent="android:Theme"
allait de même pour mon application. Je viens de le retirer et cela a fonctionné comme un charme. Merci!
Ça va comme ça:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Chaque composant (A, R, G, B) peut prendre des valeurs 0-255
. 50% of 255 = 127. 127 in Hex = 7F
Voilà comment calculer la transparence (opacité)
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 AndroidManifest.xml:
<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
place.
background
et mettre votre couleur semi-transparente préféréewindowBackground
Déclarez votre activité dans le manifeste comme ceci:
<activity
android:name=".yourActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
Et ajoutez un arrière-plan transparent à votre mise en page.
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" />
Je voulais ajouter un peu à cela car je suis également un nouveau développeur Android. La réponse acceptée est excellente, mais j'ai rencontré quelques problèmes. Je ne savais pas comment ajouter la couleur au fichier colors.xml. Voici comment procéder:
<?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 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 également mentionner cela pour aider quelqu'un d'autre.
Je l'ai atteint sur 2.3.3 en ajoutant simplement android:theme="@android:style/Theme.Translucent"
la balise d'activité dans le manifeste.
Je ne connais pas les versions inférieures ...
AppCompatActivity
si vous l'utilisez.
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);
}
N'oubliez pas un point important ici: vous devez appeler la setTheme()
fonction avant super.onCreate(savedInstanceState);
. J'ai raté ce point et je suis resté coincé pendant 2 heures, pensant pourquoi mon thème ne se reflétait pas lors de l'exécution.
Dans la fonction onCreate , sous setContentView , ajoutez cette ligne:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Le moyen le plus simple que j'ai trouvé est de définir le thème de l'activité dans le AndroidManifest sur android:theme="@android:style/Theme.Holo.Dialog"
.
Ensuite, dans la méthode onCreate de l'activité, appelez getWindow().setBackgroundDrawable(new ColorDrawable(0));
.
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 tandis que toutes les vues qu'il contient seront visibles.
en plus des réponses ci-dessus:
pour éviter le crash 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" />
Je viens de faire deux choses et cela a rendu mon activité transparente. Ils sont en dessous.
Dans le fichier manifeste, je viens d'ajouter le code ci-dessous dans la balise d' activité .
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
Et je viens de définir l'arrière-plan de la disposition principale de cette activité comme " # 80000000 ". Comme
android:background="#80000000"
Cela fonctionne parfaitement pour moi.
Si vous utilisez, AppCompatActivity
ajoutez ceci dansstyles.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 manifest
fichier, vous pouvez ajouter ce thème à la balise d'activité comme ceci
android:theme="@style/TransparentCompat"
pour plus de détails lire cet article
L'utilisation Theme.NoDisplay
fonctionnera toujours… mais uniquement sur les appareils Android plus anciens. Sur Android 6.0 et plus, en utilisant Theme.NoDisplay sans appeler finish()
à onCreate() (or, technically, before onResume())
volonté bloquer votre application. C'est pourquoi la recommandation est d'utiliserTheme.Translucent.NoTitleBar
, qui ne souffre pas de cette limitation . »
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.
// Remarque 2: créez du 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"
Toutes ces réponses peuvent prêter à confusion, il existe une différence entre l'activité transparente 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é None UI, utilisez ceci:
android:theme="@android:style/Theme.NoDisplay"
<item name="android:windowBackground">@android:color/transparent</item>