web-dev-qa-db-ja.com

透明なAlertDialogの背景が黒です

AlertDialogボックスを透明にするカスタムAlertDialogスタイルがあります。希望する透明レイアウトを警告ダイアログウィンドウに展開すると、黒い背景で表示されることを除いて、正常に機能します。私の目標は、フレームではなく4つのボタンだけが浮かんでいるように見える場所に対して、完全に透明なAlertDialogを持つことです。画像1はカスタムダイアログから得られるもので、画像2は私が望んでいるもの、または私が目指しているものです。

カスタムDialogのコードはこちら

_<style name="CustomDialog" parent="Android:Theme.Dialog">
    <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>
_

これは、私のonCreate()で呼び出しているものです

_AlertDialog.Builder imageDialog = new AlertDialog.Builder(TimeLine.this, R.style.CustomDialog);
inflater = getLayoutInflater();
View view=inflater.inflate(R.layout.tabs, null);![enter image description here][1]
AlertDialog a = imageDialog.create();
a.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
a.setView(view, 0, 0, 0, 0);

a.show();
_

current alert dialog

Desired AlertDialog

*編集**** **タブレイアウトXMLのコードはこちら `

_<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/tabLayout"
    Android:background="#000000ff">

    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="New Button"
        Android:id="@+id/button2"
        Android:layout_marginTop="206dp"
        Android:layout_below="@+id/button4"
        Android:layout_alignStart="@+id/button4" />

    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="New Button"
        Android:id="@+id/button3"
        Android:layout_alignTop="@+id/button2"
        Android:layout_alignParentStart="true" />

    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="New Button"
        Android:id="@+id/button4"
        Android:layout_alignParentTop="true"
        Android:layout_alignParentEnd="true"
        Android:layout_marginTop="100dp" />

    <Button
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="New Button"
        Android:id="@+id/button"
        Android:layout_alignParentTop="true"
        Android:layout_alignParentStart="true"
        Android:layout_marginTop="100dp" />
</RelativeLayout>
_

`

問題の原因が何であるかをテストして確認したところ、レイアウトの背景色を変更すると警告ダイアログも変更されるため、レイアウトが透明であることは事実です。ただし、レイアウトが透明に設定されている場合、膨張したレイアウトの背後にあるのは黒であるように見えます。そのため、何をすべきか、それがAlertDialog設定なのかレイアウトコードなのかがわかりません。

13
superuserdo

問題はそれです AlertDialog builderは、実際には透明なダイアログの設計には向いておらず、実際にテーマであるこの黒い背景を常に持ち、代わりにDialogを使用して透明なテーマを作成します。

サンプル:

Dialog alertDialog = new Dialog(this);
alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
alertDialog.setContentView(R.layout.tabs);
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.show();

Dialogを使用すると、背景を透明にするためにテーマを操作する必要がないため、基本的に簡単です。

73
Rod_Algonquin

次のようなものを使用してみましたか?

<style name="CustomDialog" parent="@Android:style/Theme.Translucent">
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="Android:colorBackgroundCacheHint">@null</item>
    ...
</style>

[〜#〜] edit [〜#〜]

Javaコードでこれを試してください

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

あなたのR.layout.tabs

交換

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/tabLayout"
    Android:background="#000000ff">

<RelativeLayout
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent"
    Android:id="@+id/tabLayout"
    Android:background="@Android:color/transparent">
1
Mehul Joisar

カスタム透過ダイアログまたは警告ダイアログの作成にまだ問題がある場合は、この組み合わせを使用できます。また、カスタムバックグラウンドを表示したいと思っていました。

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

例:-

/**
 * alert dialog
 */

    public class ToolTipView extends AlertDialog {

        public ToolTipView(@NonNull Context context) {
            super(context);
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.dialog_tool_tip_view);
        }

    }
1
vikas kumar