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


915

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

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

回答:


1393

res/values/styles.xmlファイルに次のスタイルを追加します(スタイルがない場合は作成します)。これが完全なファイルです。

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

(値@color/transparentはファイル#00000000に入力した色の値res/values/color.xmlです。@android:color/transparent以降のAndroidバージョンでも使用できます。)

次に、スタイルをアクティビティに適用します。次に例を示します。

<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>

13
私が使用した<item name="android:windowBackground">@android:color/transparent</item>
Someone Somewhere

33
すごい!改善点の1つ:parent = "@ android:style / Theme.Dialog"を使用すると、ダイアログの正確な動作が得られます。これは、(アクティビティのように)スライドイン/アウトではなく、フェードイン/フェードアウトすることを意味します
PakitoV

73
@Emilioが述べたように、これは主android:windowIsFloatingにtrue に設定されているため、ダイアログのように動作します。このプロパティを削除すると、通常のアクティビティのように動作します(この場合はに一致しますandroid:style/Theme.Translucent.NoTitleBar
aromero

38
<item name = "android:windowIsFloating"> true </ item>を削除してフルスクリーンで透明なアクティビティを作成しました
Kiem Duong

12
私の活動はに由来していAppCompatActivityます。だから、parent="android:Theme"私のアプリをクラッシュしていました。私はそれを取り除いただけで、それは魅力のように働きました。ありがとう!
Atul

193

こんなふうになります:

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

3
アレックスがマニフェストのアクティビティ宣言に投稿したとおりにテーマを追加するだけです-このビットandroid:theme = "@ android:style / Theme.Translucent.NoTitleBar、各アクティビティには、トランスルーセントテーマを割り当てることができます
Donal Rafferty

12
@UMMA:通常、1つの疑問符を使用するだけで十分です。複数の疑問符は、あなたの質問に答えるのに時間をかける人に、あなたが彼らの顔にジャンプしていると思い込ませます。
Matthias

7
@Matthias彼らはいつもそうです、なぜなら彼らの上司は彼らのものに飛びついているからです
リノ

16
@ user1129443: 50% black should be #7f000000。各コンポーネント(A、R、G、B)はから値を取得できます0-25550% of 255 = 127. 127 in Hex = 7F透明度(不透明度)を計算する方法
Nam Trung

4
このメソッドは、アクティビティの実行中にUIをロックしますが、半透明に設定されているため、何もできません。このUIロックを回避する方法はありますか?
Akhil Latta 2013年

126

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>

1
このアクティビティに実際に何かを表示することを計画している場合(たとえば、DialogまたはDialogFragment)、すべてがダークテーマであることがわかります。そのため、Theme.Appcompat.Light.NoActionBar代わりにテーマを継承したい場合があります。
tir38、2015年

1
私の場合、それは黒い背景を示しています。私は親テーマに何か他のものを設定させていますが、特定のアクティビティーで私は前述のようにテーマを変更しています。
Abdul Waheed、2016年

4
「android:background」を削除すると
うまく機能します

2
backgroundはあなたが好みの半透明色を削除して入れたいと思うwindowBackground
hmac

@gnobalの回答とは対照的に、アクティビティがAppCompatActivityを使用している場合、これが回答になります。
AeroEchelon

37

次のように、マニフェストでアクティビティを宣言します。

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

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


最良の方法。ありがとう
ピーター

5
このアクティビティでは、Theme.AppCompatテーマ(または子孫)を使用する必要があります。
ぷに

28

プロジェクトのAndroidマニフェストファイルで透明にするアクティビティに半透明のテーマを割り当てます。

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

16

私も新しいAndroid開発者なので、これに少し加えたいと思いました。受け入れられた答えは素晴らしいですが、私はいくつかの問題に遭遇しました。私はcolors.xmlファイルに色を追加する方法がわかりませんでした。以下にその方法を示します。

colors.xml

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

元のcolors.xmlファイルには、「drawable」というタグがありました。

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

色についても同じことを行いましたが、 "@ color /"参照がXMLでタグ "color"を探すことを意味することを理解していませんでした。他の人を助けるためにも、これについても言及すべきだと思いました。


16

2.3.3 android:theme="@android:style/Theme.Translucent"では、マニフェストにアクティビティタグを追加するだけでそれを実現しました。

下位バージョンについてはわかりません...


これは2.2でも正常に機能します。リストビューで単純なアクティビティを作成したところ、最後のアクティビティの上に浮かび上がりました。
スロット

API 1で追加されましたが、問題ありません:)
xmen

6
これを使用しているAppCompatActivity場合は使用しないでください。
zackygaurav

7.0でも動作するので、その良いアプローチです。私はそれを@android:style / Theme.Translucent.NoTitleBar.Fullscreenに変更しました
Sandeep

16

私の場合、いくつかの条件に基づいてテーマを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);
}

ここで1つの重要な点を覚えておいてください:のsetTheme()前に関数を呼び出す必要がありますsuper.onCreate(savedInstanceState);。私はこの点を逃して2時間スタックし、なぜ私のテーマが実行時に反映されないのかと考えました。


9

onCreate機能、下にsetContentView、次の行を追加します。

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

23
何らかの理由で背景を完全に黒にします。
Subin Sebastian

私も@SubinSebastian、それに対する修正を誰かが見つけましたか?
finnmglas

8

アクティビティの背景画像を透明にしてください。または、XMLファイルにテーマを追加します。

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

7

私が見つけた最も簡単な方法は、AndroidManifestでアクティビティのテーマをに設定することandroid:theme="@android:style/Theme.Holo.Dialog"です。

次に、アクティビティのonCreateメソッドでを呼び出しますgetWindow().setBackgroundDrawable(new ColorDrawable(0));


6

ダイアログアクティビティでは、これを使用します。

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

ただし、アクティビティのメインビューを非表示に設定する必要もあります。それ以外の場合、背景は非表示になり、その中のすべてのビューは表示されます。


2
背景を完全に
黒くします

5

上記の回答に加えて:

アクティビティでのAndroid Oreo関連のクラッシュを回避する

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

2
2018年のように、これはあるべき最良の答え
オタクガイ

API 28を使用したエミュレータの背景を黒くしてくれた
Someone Somewhere

Android 8.0で向きの設定に関連するクラッシュを修正するためにこれを試しましたが、それでもIllegalStateExceptionが発生します。フルスクリーンの不透明なアクティビティのみが向きを要求します
Rahul Sahni

3

私は2つのことをしただけで、自分の活動が透明になりました。彼らは以下です。

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

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

    android:background="#80000000"

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


3

使用している場合AppCompatActivityは、これを追加しますstyles.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>

manifestファイルあなたは、このようにアクティビティタグにこのテーマを追加することができます

android:theme="@style/TransparentCompat"

詳細については、この記事をお読みください


2

半透明テーマを割り当てます

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

2

2つの方法があります。

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

を使用してTheme.NoDisplayも機能しますが、古いAndroidデバイスでのみ機能します。Android 6.0以降では、呼び出しなしでTheme.NoDisplayを使用finish()するonCreate() (or, technically, before onResume())と、アプリがクラッシュします。これが、この制限の影響を受けないを使用することを推奨する理由です。」Theme.Translucent.NoTitleBar


1

注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: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>

0

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

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

0

これらすべての答えは混乱を招く可能性があります。透過的アクティビティとなしUIアクティビティには違いがあります。

これを使用する:

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

アクティビティを透過にしますが、UIをブロックします。

None UIアクティビティが必要な場合は、これを使用してください:

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


0

setContentView(R.layout.mLayout)アクティビティから削除して、テーマをに設定できますandroid:theme="@style/AppTheme.Transparent"。詳細については、このリンクを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.