Подтвердить что ты не робот

Прозрачный AlertDialog имеет черный фон

У меня есть собственный стиль AlertDialog, который делает поле AlertDialog прозрачным. Он отлично работает, за исключением того, что когда я надуваю свой желаемый прозрачный макет в диалоговое окно предупреждения, он отображается с черным фоном. Моя цель состоит в том, чтобы иметь полностью прозрачный AlertDialog, где кажется, что есть только 4 кнопки, плавающие, а не кадр. Image one - это то, что дает мне настраиваемый диалог, изображение два - мое желание или то, к чему я стремлюсь.

Вот код для пользовательского 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 или мой код макета.

4b9b3361

Ответ 1

Проблема в том, что 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 не требует каких-либо манипуляций с темами для прозрачного фона, поэтому это практически легко.

Ответ 2

Вы пытались использовать что-то вроде этого:

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

ИЗМЕНИТЬ

Попробуйте это в java-коде

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

Ответ 3

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