android-activity einfügen - Wie erstelle ich eine transparente Aktivität auf Android?




länge wordpress (15)

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

Wie kann ich das erreichen?


Answers

Lassen Sie das Aktivitätshintergrundbild transparent sein. Oder fügen Sie das Thema in der XML-Datei hinzu:

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

Für die Dialogaktivität verwende ich das:

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

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


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>

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>

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>

Es geht so:

<activity android:name=".usual.activity.Declaration" 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));

Weisen Sie ihm das Transluzent-Thema zu

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

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.


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


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

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.


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

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


Von ihrer source wurde die zurückgegebene Methode zurückgegeben, bis sie in API 21 geändert wurde.

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 * @return whether the user making this call is a goat 
 */
public boolean isUserAGoat() {
    return false;
}

Es sieht so aus, als ob die Methode für uns als Entwickler keinen wirklichen Nutzen hat. Jemand hat zuvor erklärt, dass es ein Osterei sein könnte.

In API 21 wurde die Implementierung geändert, um zu prüfen, ob eine installierte App mit dem Paket com.coffeestainstudios.goatsimulator

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

Hier ist der Quelllink





android android-activity transparent