Risposte:
Aggiungi il seguente stile nel tuo res/values/styles.xml
file (se non ne hai uno, crealo.) Ecco un file completo:
<?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>
(Il valore @color/transparent
è il valore del colore #00000000
che ho inserito nel res/values/color.xml
file. Puoi anche usarlo @android:color/transparent
nelle versioni successive di Android.)
Quindi applica lo stile alla tua attività, ad esempio:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
android:windowIsFloating
impostato su true. Rimuovi questa proprietà per comportarti come una normale attività (in questo caso corrisponderà android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
. Quindi parent="android:Theme"
stava andando in crash la mia app. L'ho appena rimosso e ha funzionato come un fascino. Grazie!
Va così:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Ogni componente (A, R, G, B) può assumere valori da 0-255
. 50% of 255 = 127. 127 in Hex = 7F
Ecco come calcolare la trasparenza (opacità)
Nel 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>
In AndroidManifest.xml:
<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
.
background
e mettere il tuo colore semitrasparente preferito inwindowBackground
Dichiara la tua attività nel manifest in questo modo:
<activity
android:name=".yourActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
E aggiungi uno sfondo trasparente al layout.
Assegna il tema traslucido all'attività che desideri rendere trasparente nel file manifest Android del tuo progetto:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Volevo aggiungere un po 'a questo dato che sono anche un nuovo sviluppatore Android. La risposta accettata è ottima, ma ho avuto qualche problema. Non ero sicuro di come aggiungere il colore al file colors.xml. Ecco come dovrebbe essere fatto:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="class_zero_background">#7f040000</color>
<color name="transparent">#00000000</color>
</resources>
Nel mio file colors.xml originale avevo il tag "drawable":
<drawable name="class_zero_background">#7f040000</drawable>
E così ho fatto anche questo per il colore, ma non capivo che il riferimento "@ color /" significava cercare il tag "color" nell'XML. Ho pensato che avrei dovuto menzionarlo anche per aiutare chiunque altro.
L'ho raggiunto su 2.3.3 semplicemente aggiungendo android:theme="@android:style/Theme.Translucent"
il tag attività nel manifest.
Non conosco le versioni precedenti ...
AppCompatActivity
se lo stai usando.
Nel mio caso, devo impostare il tema sul runtime in Java sulla base di alcune condizioni. Quindi ho creato un tema in stile (simile ad altre risposte):
<?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>
Quindi in Java l'ho applicato alla mia attività:
@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);
}
Ricorda un punto importante qui: devi setTheme()
prima chiamare la funzione super.onCreate(savedInstanceState);
. Ho perso questo punto e sono rimasto bloccato per 2 ore, pensando al motivo per cui il mio tema non si riflette in fase di esecuzione.
Nella funzione onCreate , sotto setContentView , aggiungi questa riga:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Il modo più semplice che ho trovato è impostare il tema dell'attività in AndroidManifest su android:theme="@android:style/Theme.Holo.Dialog"
.
Quindi, nel metodo onCreate dell'attività, chiama getWindow().setBackgroundDrawable(new ColorDrawable(0));
.
Per l'attività di dialogo utilizzo questo:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
Ma devi anche impostare la vista principale nell'attività su invisibile. Altrimenti lo sfondo sarà invisibile mentre tutte le viste al suo interno saranno visibili.
oltre alle risposte sopra:
per evitare l'arresto anomalo di Android Oreo sull'attività
<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" />
Ho appena fatto due cose e questo ha reso la mia attività trasparente. Sono sotto.
Nel file manifest ho appena aggiunto il codice seguente nel tag attività .
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
E ho appena impostato lo sfondo del layout principale per quell'attività come " # 80000000 ". Piace
android:background="#80000000"
Funziona perfettamente per me.
Se lo stai utilizzando, AppCompatActivity
aggiungi questostyles.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>
Nel manifest
file puoi aggiungere questo tema al tag attività in questo modo
android:theme="@style/TransparentCompat"
per maggiori dettagli leggi questo articolo
L'uso Theme.NoDisplay
continuerà a funzionare ... ma solo su dispositivi Android meno recenti. Su Android 6.0 e versioni successive, l'utilizzo di Theme.NoDisplay senza effettuare la chiamata arresta finish()
in onCreate() (or, technically, before onResume())
modo anomalo l'app. Questo è il motivo per cui la raccomandazione è di usare Theme.Translucent.NoTitleBar
, che non soffre di questa limitazione . "
Nota 1: nella cartella Drawable creare test.xml e copiare il seguente codice
<?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>
// Nota: gli angoli e la forma sono conformi alle vostre esigenze.
// Nota 2: creare 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>
Basta aggiungere la seguente riga al tag attività nel file manifest che deve apparire trasparente.
android:theme="@android:style/Theme.Translucent"
Tutte queste risposte potrebbero essere fonte di confusione, c'è una differenza tra l'attività trasparente e l'attività dell'interfaccia utente Nessuna.
Usando questo:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Renderà l'attività trasparente ma bloccherà l'interfaccia utente.
Se si desidera un'attività dell'interfaccia utente Nessuna, utilizzare questa:
android:theme="@android:style/Theme.NoDisplay"
<item name="android:windowBackground">@android:color/transparent</item>