android - style theme transparent




Androidで透明なアクティビティを作成するにはどうすればよいですか? (12)

2つの方法があります:

  1. Theme.NoDisplayの使用
  2. Theme.Translucent.NoTitleBarの使用

Theme.NoDisplayを使用しても動作しますが、古いAndroid搭載端末でのみ動作します。 Android 6.0以降では、 onCreate() (or, technically, before onResume())finish()を呼び出さずにonCreate() (or, technically, before onResume())すると、アプリがクラッシュします。 このため、この制限を受けないTheme.Translucent.NoTitleBarを使用することをお勧めします。

私は別のアクティビティの上に透明なアクティビティを作成したい。

どうすればこれを達成できますか?


"AppCompat"ライブラリまたは "Android Design Support Library"では少し違っています:

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>

AndroidManifest.xmlの場合:

<activity>
    android:name=".WhateverNameOfTheActivityIs"
    android:theme="@style/Theme.AppCompat.Translucent"
    ...
</activity>

onCreate関数のsetContentViewの下に次の行を追加します。

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

こんなふうになります:

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

アクティビティの背景イメージを透明にします。 または、XMLファイルにテーマを追加します。

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

ダイアログアクティビティの場合、私はこれを使用します:

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

しかし、アクティビティのメインビューを非表示に設定する必要もあります。 それ以外の場合、背景は表示されませんが、背景は表示されません。


マニフェストであなたの活動を次のように宣言してください:

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

レイアウトに透明な背景を追加します。


マニフェストファイル内の透明に見える必要があるアクティビティタグに次の行を追加するだけです。

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

上記の回答に加えて:

オレオが活動にぶつかることを避けるために

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

注1:Drawableフォルダでtest.xmlを作成し、次のコードをコピーします

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

//注意:コーナーとシェイプはあなたの必要条件に従います。

//注2:Create 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>

私の場合、私はいくつかの条件に基づいてJavaでランタイムのテーマを設定する必要があります。 だから私はスタイルで1つのテーマを作成しました(他の回答に似ています):

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

それから私はJavaに私の活動にそれを適用しました:

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


    }

ここで重要な点を覚えておいてくださいsetTheme()関数を呼び出す前に、 super.onCreate(savedInstanceState);呼び出す必要がありますsuper.onCreate(savedInstanceState); 。 私はこの点を忘れて、2時間ぎっしりと立ち、私のテーマが実行時に反映されない理由を考えました。


私はちょうど2つのことをし、それは私の活動を透明にしました。 彼らは以下の通りです。

  1. マニフェストファイルでは、以下のコードをactivityタグに追加しました。

    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
    
  2. そして、そのアクティビティのメインレイアウトの背景を " #80000000 "に設定しました。 好き

    android:background="#80000000"
    

それは私にとって完璧に機能します。







transparent