Androidの背景が透明なダイアログ


247

Androidのダイアログボックスから黒い背景を削除するにはどうすればよいですか。写真は問題を示しています。

ここに画像の説明を入力してください

final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger); 

ダイアログ作成用のコードを表示してください
MByD

このような状況もここでのコードのこの2行で動作します。stackoverflow.com/questions/16186818/...
DeePanShu

ここで最良の答えを見つけてリンクの説明を
コリンズウシ

回答:


696

このコードを追加

 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

または、これの代わりに:

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

16
ありがとうございました!ただし、私は使用することを好みますdialog.getWindow().setBackgroundDrawable(new ColorDrawableResource(R.color.transparent));
RileyE 2013

6
このソリューションが役立ちます。問題は、幅が画面にフィットすることです。通常のダイアログと比較してパディングはありません。しかし、Android 4.1はデフォルトでこれを処理します
Basavaraj Hampali

1
アラートダイアログを使用している場合はどうなりますか?
Ahmad Arslan、

1
DialogFragment内にいる場合は、getDialog()。getWindow()...を呼び出します(ビューが作成された後、たとえばonViewCreatedコールバックで)。
akohout 2015

14
私は使用することを好むdialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
Peter Zhao

82
<style name="NewDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>
</style>

Javaで使用

Dialog dialog = new Dialog(this, R.style.NewDialog);

お役に立てれば幸いです。


それは機能しますが、あなたがその透明な領域のダイアログをクリックすると、これを処理する方法が閉じられませんか?
John

2
@John使用できます:dialog.setCanceledOnTouchOutside(true);
LongLv 2016

parent = "Theme.AppCompat.Dialog"を使用して、デフォルトで外部タッチで終了することができます。
ダークレオンハート2017

31

私はより単純な問題に直面し、私が思いついた解決策は、透明な背景のテーマを適用することでした。これらの線をあなたのスタイルで書いてください

    <item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<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>

そして追加

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

メインマニフェストファイル内、ダイアログアクティビティのブロック内。

さらに、ダイアログアクティビティのXMLセット

 android:background= "#00000000"

2
または、ダイアログのスタイルを設定するだけの場合は、これを使用します。<style name = "Theme.Transparent" parent = "@ android:style / Theme.Dialog">
Roosevelt

16

どういうわけかザカリアのソリューションは私のために機能しなかったので、この問題を解決するために以下のテーマを使用しました...

<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

次のようにこのテーマをダイアログに設定できます

final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme); 

楽しい!!


1
<item name = "android:windowBackground">​​ @ color / transparent </ item>この行を下の行に置き換えるか、colors.xmlファイルに透明の値を追加する必要があります。<item name = "android:windowBackground">​​ @ android:color / transparent </ item>
AkhilGite

12

次のものを使用できます。

setBackgroundDrawable(null);

method.Andはドキュメントです:

  /**
    * Set the background to a given Drawable, or remove the background. If the
    * background has padding, this View's padding is set to the background's
    * padding. However, when a background is removed, this View's padding isn't
    * touched. If setting the padding is desired, please use
    * {@link #setPadding(int, int, int, int)}.
    *
    * @param d The Drawable to use as the background, or null to remove the
    *        background
    */

この意志の仕事ができますが、ダイアログボックスではなく、高速なソリューションが、良い1 ....延長する場合にのみ
プログラマー

11

ダイアログポップアップはデフォルトの黒の背景色またはテーマカラーを塗りつぶすので、TRANSPARENT背景をダイアログに設定する必要があります。以下のコードを試してください:-

final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();

10

ダイアログの暗い背景を破壊したい場合は、これを使用してください

dialog.getWindow().setDimAmount(0);

ありがとうございました。それは私が探していたものです。それは素晴らしい。
Farruh Habibullaev

1
これは最も簡単な方法で仕事をします、ありがとう!あなたがそこに(私は15に設定された最小のSDKのバージョンを持っている)から、あなたのアプリがデバイスの100%で実行したい場合は、Androidのは次のことを示唆している: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
コルクデア・ダニーEKバン

8

既存のすべての回答で私が見つけた1つの問題は、マージンが保持されないことです。これらはすべてandroid:windowBackground、マージンを担当する属性を単色で上書きするためです。しかし、私はAndroid SDKを少し掘り下げて、デフォルトのウィンドウ背景ドローアブルを見つけて、透明なダイアログを許可するように少し変更しました。

まず、/ platforms / android-22 / data / res / drawable / dialog_background_material.xmlをプロジェクトにコピーします。または、これらの行を新しいファイルにコピーするだけです。

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="?attr/colorBackground" />
    </shape>
</inset>

android:colorがに設定されていることに注意してください?attr/colorBackground。これは、デフォルトで表示される灰色/白の純色です。android:backgroundカスタムスタイルで定義された色を透明にして透明度を表示するには、をに変更?attr/colorBackgroundするだけ@android:color/transparentです。これは次のようになります。

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="@android:color/transparent" />
    </shape>
</inset>

その後、あなたのテーマに行き、これを追加してください:

<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
    <item name="android:windowBackground">@drawable/newly_created_background_name</item>
    <item name="android:background">@color/some_transparent_color</item>
</style>

置き換えてくださいnewly_created_background_name作成したばかりの描画可能ファイルの実際の名前で、そして置き換えるsome_transparent_color希望透明な背景を持ちます。

その後、テーマを設定するだけです。これを作成するときに使用しますAlertDialog.Builder

    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);

次に、通常どおりにダイアログを作成、作成、表示します。


AppCompat AlertDialogを使用してこれを追跡しましたが、android:backgroundを使用する代わりに、背景のドローアブルのandroid:color自体で直接透明色を設定することを選択しました。これを行う必要があったのは、android:backgroundを設定すると、どういうわけか一部の領域がまだ透明にならなかったためです。しかし、テクニックを共有してくれてありがとう!
Dileep PG

3

zGnepと同じソリューションですが、xmlを使用します。

android:background="@null"

3

あなたのコードでこれを試してください:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

それは間違いなく動作します...私の場合...!私の友達


3

これは、AlertDialogで半透明を実現するために行ったものです。

カスタムスタイルを作成しました:

<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
    <item name="android:colorBackground">#32FFFFFF</item>
</style>

そして、次のようにダイアログを作成します。

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();

1

私の場合、解決策は次のように機能します:

dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

さらに、カスタムダイアログのXMLで:

android:alpha="0.8"

1

私と一緒に機能するこのコードを使用してください:

    Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
    dialog.show();

2
あなたの意図にいくつかの説明を加えるとき、それはOPとさらなる訪問者にとってより陽気であると思います。
レポーター

1

これらのスタイルコードをスタイルに設定する

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

そして、単に行の下でfalseをtrueに変更します

<item name="android:backgroundDimEnabled">true</item>

それはあなたの背景を薄暗くします。


1

注意:背景の変更にビルダーを使用しないでください。

Dialog dialog = new Dialog.Builder(MainActivity.this)
                                .setView(view)
                                .create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

への変更

Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();

Dialog.builderを使用する場合、それにgetWindow()オプションはありません。


0
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

これが私のやり方です、あなたは試すことができます!


1
これは現在非推奨です。@ deprecatedぼかしはサポートされなくなりました。
arberg 2016

0

DialogFramentクラスを拡張した場合、テーマを次のように設定できます。

setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);

そして、styles.xmlファイルでカスタムテーマを作成します(パラメーターについては@LongLvの回答を参照してください)

<item name="android:windowCloseOnTouchOutside">true</item>ユーザーがダイアログの外側をタッチしたときにダイアログを閉じる場合は、忘れずに追加してください。


0

カスタムクラスでカスタムダイアログを使用する場合は、クラスの透明度を変更する必要があります。onCreate()に次の行を追加します。

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

0

dialog.getWindow()。setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(ctx、android.R.color.transparent)));


0

R.layout.themechangerダイアログにはデフォルトの背景色があるため、背景色がないことを確認してください。

また、追加する必要があります dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));

そして最後に

<style name="TransparentDialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
</style>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.