Wie erstelle ich eine transparente Aktivität auf Android?

915

Ich möchte eine transparente Aktivität zusätzlich zu einer anderen Aktivität erstellen.

Wie kann ich das erreichen?

UMAR
quelle

Antworten:

1393

Fügen res/values/styles.xmlSie Ihrer Datei den folgenden Stil hinzu (falls Sie keinen haben, erstellen Sie ihn). Hier ist eine vollständige Datei:

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

(Der Wert @color/transparentist der Farbwert, #00000000den ich in die res/values/color.xmlDatei eingefügt habe. Sie können ihn auch @android:color/transparentin späteren Android-Versionen verwenden.)

Wenden Sie dann den Stil auf Ihre Aktivität an, zum Beispiel:

<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
Gnobal
quelle
13
Ich benutzte<item name="android:windowBackground">@android:color/transparent</item>
Jemand irgendwo
33
Großartig! Nur eine Verbesserung: Wenn Sie parent = "@ android: style / Theme.Dialog" verwenden, erhalten Sie das genaue Verhalten eines Dialogs. Das bedeutet,
ein- und auszublenden
73
Wie @Emilio bereits erwähnt hat, verhält sich dies wie ein Dialog, hauptsächlich weil android:windowIsFloatinges auf true gesetzt ist. Entfernen Sie diese Eigenschaft, um sich wie eine normale Aktivität zu verhalten (in diesem Fall wird sie übereinstimmen android:style/Theme.Translucent.NoTitleBar)
Aromero
38
Ich habe <item name = "android: windowIsFloating"> true </ item> entfernt, um eine Vollbild- und transparente Aktivität zu erhalten
Kiem Duong,
12
Meine Tätigkeit wurde abgeleitet von AppCompatActivity. Also parent="android:Theme"stürzte meine App ab. Ich habe es gerade entfernt und es hat wie ein Zauber funktioniert. Vielen Dank!
Atul
193

Es geht so:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
yanchenko
quelle
3
Sie fügen das Thema einfach so hinzu, wie Alex es in Ihrer Aktivitätsdeklaration im Manifest veröffentlicht hat - dieses Bit android: theme = "@ android: style / Theme.Translucent.NoTitleBar. Für jede Aktivität können Sie ihm das durchscheinende Thema zuweisen
Donal Rafferty
12
@UMMA: Die Verwendung eines Fragezeichens ist normalerweise ausreichend. Mehrere Fragezeichen lassen Leute, die sich die Zeit nehmen, Ihre Fragen zu beantworten, denken, dass Sie ihnen ins Gesicht springen.
Matthias
7
@Matthias sind sie normalerweise, weil ihre Chefs auf ihre springen
Reno
16
@ user1129443 : 50% black should be #7f000000. Jede Komponente (A, R, G, B) kann Werte annehmen 0-255. 50% of 255 = 127. 127 in Hex = 7FSo berechnen Sie Transparenz (Deckkraft)
Nam Trung
4
Diese Methode sperrt die Benutzeroberfläche, während die Aktivität ausgeführt wird. Da sie jedoch auf durchscheinend eingestellt ist, kann man nichts tun. Gibt es eine Möglichkeit, diese Sperrung der Benutzeroberfläche zu vermeiden?
Akhil Latta
126

In der 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 der AndroidManifest.xml:

<activity
    android:name=".WhateverNameOfTheActivityIs"
    android:theme="@style/Theme.AppCompat.Translucent">
    ...
</activity>
Andrey
quelle
1
Wenn Sie vorhaben, in dieser Aktivität tatsächlich etwas anzuzeigen (z. B. einen Dialog oder ein DialogFragment), werden Sie feststellen, dass alles unter dem Thema Dunkel steht. Vielleicht möchten Sie Theme.Appcompat.Light.NoActionBarstattdessen, dass Ihr Thema von erbt .
Tir38
1
In meinem Fall wird ein schwarzer Hintergrund angezeigt. Ich habe das übergeordnete Thema etwas anderes festgelegt, aber bei einer bestimmten Aktivität ändere ich das Thema wie erwähnt. Hilfe?
Abdul Waheed
4
Funktioniert super, wenn ich "android: background" entferne
Oded Breiner
2
Ich denke, Sie möchten entfernen backgroundund Ihre bevorzugte halbtransparente Farbe inwindowBackground
hmac
Dies sollte die Antwort sein, wenn Ihre Aktivität im Gegensatz zur Antwort von @ gnobal AppCompatActivity verwendet.
AeroEchelon
37

Erklären Sie Ihre Aktivität im Manifest folgendermaßen:

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

Fügen Sie Ihrem Layout einen transparenten Hintergrund hinzu.

Deepak Swami
quelle
Bester Weg. Danken
Peter
5
Sie müssen für diese Aktivität ein Theme.AppCompat-Thema (oder einen Nachkommen) verwenden.
Puni
28

Weisen Sie das durchscheinende Thema der Aktivität zu, die Sie in der Android-Manifestdatei Ihres Projekts transparent machen möchten:

<activity
    android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Jigar Pandya
quelle
16

Ich wollte noch etwas hinzufügen, da ich auch ein neuer Android-Entwickler bin. Die akzeptierte Antwort ist großartig, aber ich hatte einige Probleme. Ich war mir nicht sicher, wie ich die Farbe zur Datei colours.xml hinzufügen sollte. So sollte es gemacht werden:

Farben.xml

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

In meiner ursprünglichen Datei colours.xml hatte ich das Tag "drawable":

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

Und so habe ich das auch für die Farbe gemacht, aber ich habe nicht verstanden, dass die Referenz "@ color /" bedeutet, dass im XML nach dem Tag "color" gesucht wird. Ich dachte, ich sollte das auch erwähnen, um anderen zu helfen.

Camille Sévigny
quelle
16

Ich habe es in 2.3.3 erreicht, indem ich einfach android:theme="@android:style/Theme.Translucent"das Aktivitäts-Tag im Manifest hinzugefügt habe .

Ich weiß nicht über niedrigere Versionen ...

androabhay
quelle
Dies funktioniert auch gut für 2.2. Ich habe gerade eine einfache Aktivität mit einer Listenansicht erstellt, die über der letzten Aktivität schwebt.
Slott
Es wurde in API 1 hinzugefügt, das ist kein Problem :)
Xmen
6
Nicht verwenden, AppCompatActivitywenn Sie dies verwenden.
Zackygaurav
funktioniert in 7.0 auch so sein guter ansatz. Ich habe es in @android geändert: style / Theme.Translucent.NoTitleBar.Fullscreen
Sandeep
16

In meinem Fall muss ich das Thema auf der Laufzeit in Java basierend auf einigen Bedingungen festlegen. Also habe ich ein Thema mit Stil erstellt (ähnlich wie bei anderen Antworten):

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

Dann habe ich es in Java auf meine Aktivität angewendet:

@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);
}

Beachten Sie hier einen wichtigen Punkt : Sie müssen die setTheme()Funktion vorher aufrufen super.onCreate(savedInstanceState);. Ich habe diesen Punkt verpasst und bin 2 Stunden geblieben, weil ich mir überlegt habe, warum mein Thema zur Laufzeit nicht wiedergegeben wird.

Juwel
quelle
9

In der onCreate Funktion unter dem setContentView , fügen Sie diese Zeile:

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Leebeedev
quelle
23
Der Hintergrund wird aus irgendeinem Grund vollständig SCHWARZ.
Subin Sebastian
meins auch @SubinSebastian, hat jemand eine Lösung dafür gefunden?
finnmglas
8

Lassen Sie einfach das Aktivitätshintergrundbild transparent sein. Oder fügen Sie das Thema in die XML-Datei ein:

<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Jian
quelle
7

Der einfachste Weg, den ich gefunden habe, besteht darin, das Thema der Aktivität im AndroidManifest auf zu setzen android:theme="@android:style/Theme.Holo.Dialog" .

Rufen Sie dann in der onCreate-Methode der Aktivität auf getWindow().setBackgroundDrawable(new ColorDrawable(0));.

Drew Leonce
quelle
6

Für Dialogaktivitäten verwende ich Folgendes:

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

Sie müssen jedoch auch Ihre Hauptansicht in der Aktivität auf unsichtbar setzen. Andernfalls ist der Hintergrund unsichtbar, während alle darin enthaltenen Ansichten sichtbar sind.

Pavel Kataykin
quelle
2
Macht den Hintergrund komplett SCHWARZ
ucMedia
5

zusätzlich zu den obigen Antworten:

um Android Oreo im Zusammenhang mit Absturz bei Aktivität zu vermeiden

<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" />
Zafer Celaloglu
quelle
2
Ab 2018 sollte dies die beste Antwort sein
Geek Guy
gab mir einen schwarzen Hintergrund auf Emulator mit API 28
Jemand irgendwo
Ich habe versucht, den Absturz im Zusammenhang mit der Einstellung der Ausrichtung in Android 8.0 zu beheben, erhalte jedoch weiterhin die IllegalStateException: Nur undurchsichtige Vollbildaktivitäten fordern die Ausrichtung an
Rahul Sahni,
3

Ich habe nur zwei Dinge getan, und das hat meine Aktivitäten transparent gemacht. Sie sind unten.

  1. In der Manifestdatei habe ich gerade den folgenden Code in das Aktivitäts- Tag eingefügt .

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
  2. Und ich habe gerade den Hintergrund des Hauptlayouts für diese Aktivität als " # 80000000 " festgelegt. Mögen

    android:background="#80000000"

Es funktioniert perfekt für mich.

Md Sufi Khan
quelle
3

Wenn Sie verwenden, AppCompatActivityfügen Sie dies hinzustyles.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>

In der manifestDatei können Sie dieses Thema zu einem Aktivitäts-Tag wie diesem hinzufügen

android:theme="@style/TransparentCompat"

Weitere Informationen finden Sie in diesem Artikel

Zohab Ali
quelle
2

Weisen Sie ihm das durchscheinende Thema zu

android:theme="@android:style/Theme.Translucent.NoTitleBar"
Saurabh
quelle
2

Es gibt zwei Möglichkeiten:

  1. Verwenden von Theme.NoDisplay
  2. Verwenden von Theme.Translucent.NoTitleBar

Die Verwendung Theme.NoDisplayfunktioniert weiterhin… aber nur auf älteren Android-Geräten. Auf Android 6.0 und höher, mit Theme.NoDisplay ohne Aufruf finish()in onCreate() (or, technically, before onResume())wird zum Absturz der App. Aus diesem Grund wird die Verwendung empfohlenTheme.Translucent.NoTitleBar , die nicht unter dieser Einschränkung leidet . “

Shubham Soni
quelle
1

Hinweis 1: Erstellen Sie im Ordner Drawable die Datei test.xml und kopieren Sie den folgenden Code

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

// Hinweis: Ecken und Form entsprechen Ihren Anforderungen.

// Hinweis 2: XML erstellen:

    <?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>
ManiTeja
quelle
0

Fügen Sie einfach die folgende Zeile zum Aktivitäts-Tag in Ihrer Manifest-Datei hinzu, die transparent aussehen muss.

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

Alle diese Antworten können verwirrend sein. Es gibt einen Unterschied zwischen der Aktivität "Transparent" und der Aktivität "Keine Benutzeroberfläche".

Verwenden Sie diese:

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

Macht die Aktivität transparent, blockiert aber die Benutzeroberfläche.

Wenn Sie eine Aktivität "Keine Benutzeroberfläche" möchten, verwenden Sie diese:

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

Kashkashio
quelle
0

Sie können setContentView(R.layout.mLayout)aus Ihrer Aktivität entfernen und das Thema als festlegen android:theme="@style/AppTheme.Transparent". Überprüfen Sie diesen Link für weitere Details.

Bali
quelle