android - länge - wordpress meta tags




Wie erstelle ich eine transparente Aktivität auf Android? (12)

Ich möchte eine transparente Aktivität über einer anderen Aktivität erstellen.

Wie kann ich das erreichen?


Es gibt zwei Wege,

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

Die Verwendung von Theme.NoDisplay immer noch ... aber nur auf älteren Android-Geräten. Unter Android 6.0 und höher führt das Verwenden von Theme.NoDisplay ohne Aufruf von finish() in onCreate() (or, technically, before onResume()) Absturz Ihrer App. Aus diesem Grund empfehlen Theme.Translucent.NoTitleBar die Verwendung von Theme.Translucent.NoTitleBar , die nicht unter dieser Einschränkung leidet. "


Deklarieren Sie Ihre Aktivität im Manifest wie folgt:

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

Und fügen Sie Ihrem Layout einen transparenten Hintergrund hinzu.


Es geht so:

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

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

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

Hinweis 1: Erstellen Sie im Drawable-Ordner 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 ist wie pro Anforderung.

// Hinweis 2: Erstelle 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>

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

Ich kenne keine niedrigeren Versionen ...


Ich wollte etwas hinzufügen, da ich auch ein neuer Android-Entwickler bin. Die angenommene Antwort ist großartig, aber ich habe einige Probleme bekommen. Ich war mir nicht sicher, wie ich der colors.xml-Datei die Farbe hinzufügen sollte. Hier ist, wie es gemacht werden sollte:

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 colors.xml Datei hatte ich das Tag "drawable":

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

Und das habe ich auch für die Farbe getan, aber ich habe nicht verstanden, dass die "@ color /" -Referenz das Tag "color" in der XML sucht. Ich dachte, ich sollte das auch erwähnen, um anderen zu helfen.


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 andere 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);


    }

Merken Sie sich einen wichtigen Punkt hier: Sie müssen die Funktion setTheme() vor super.onCreate(savedInstanceState); . Ich habe diesen Punkt verpasst und blieb 2 Stunden stecken, weil ich dachte, dass mein Thema zur Laufzeit nicht wiedergegeben wird.


Mit der "AppCompat" -Bibliothek oder "Android Design Support Library" ist es ein bisschen anders:

In der Datei 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>

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" />

Fügen Sie in der onCreate- Funktion unterhalb von setContentView folgende Zeile hinzu:

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

Fügen Sie den folgenden Stil in Ihre res/values/styles.xml Datei ein (wenn Sie noch keine haben, erstellen Sie sie.) 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/transparent ist der Farbwert #00000000 den ich in die Datei res/values/color.xml . Sie können @android:color/transparent in 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>




transparent