Создание прозрачного макета Android в настраиваемом диалоговом окне предупреждений

Я написал настраиваемый диалог, который отлично работает.

public class GalleryAlertDialog extends Dialog {}

В классе я называю класс с

dialog.show();

Я хочу добиться такого вида:

введите описание изображения здесь

Мне нужна кнопка над диалоговым окном, вот так.

Однако вот что я получаю:

введите описание изображения здесь

Вот часть xml макета, в которой я объявляю макет и кнопку внутри него:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical">

<LinearLayout
    android:id="@+id/ll_buttonContainer"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginBottom="5dip"
    android:gravity="right"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/btn_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/selector_button_popupclose"
        android:contentDescription="TODO"
        android:tag="btn_close" />
</LinearLayout>

<LinearLayout
    android:id="@+id/ll_pagerContainer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/ll_buttonContainer"
            android:layout_marginTop="80dip"
            android:background="@color/white" />

       <ToggleButton
                    android:id="@+id/tbFavorite"
                    android:layout_width="35dip"
                    android:layout_height="35dip"
                    android:layout_gravity="bottom|right"
                    android:layout_marginBottom="10dp"
                    android:layout_marginRight="10dip"
                    android:background="@drawable/selector_check"
                    android:checked="false"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    android:textOff=""
                    android:textOn="" />

    </FrameLayout>
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="#ff212121"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/llContactFullName"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="@color/white"
        android:gravity="left|center_vertical"
        android:orientation="vertical" >

        <View
            android:layout_width="fill_parent"
            android:layout_height="5dp"
            android:background="@color/seperator" />

        <TextView
            android:id="@+id/txtContactFullName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:ellipsize="end"
            android:maxLines="1"
            android:paddingRight="5dp"
            android:singleLine="true"
            android:textColor="@color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/txtTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:ellipsize="end"
            android:maxLines="1"
            android:paddingRight="5dp"
            android:singleLine="true"
            android:textColor="@color/black"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/txtCompany"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:layout_marginTop="10dip"
            android:ellipsize="end"
            android:maxLines="1"
            android:paddingRight="5dp"
            android:singleLine="true"
            android:textColor="@color/black"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/txtPosition"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dip"
            android:layout_marginLeft="10dip"
            android:ellipsize="end"
            android:maxLines="1"
            android:paddingRight="5dp"
            android:singleLine="true"
            android:textColor="@color/black"
            android:textSize="14sp" />
    </LinearLayout>
</LinearLayout>

.....

Я также попытался программно предоставить ll_buttonContainer прозрачный фон.

llButtonContainer.setBackgroundColor(mContext.getResources().getColor(
    R.color.transparent_tr));

llButtonContainer.setBackgroundColor(Color.argb(0, 0, 0, 0));

Я даже пробовал

        android:background="null"        

Ничего не работает. Макет по-прежнему виден, он приобретает любой цвет (красный, желтый, белый и т. Д.), Кроме прозрачного. Это как это работает, я не смогу сделать его прозрачным фоном из-за того, как работает Dialog?

Спасибо за любую помощь.


person Lev    schedule 19.11.2013    source источник
comment
Покажите нам весь свой xml, проблема может быть в родительском элементе LinearLayout   -  person Damien R.    schedule 19.11.2013


Ответы (2)


Хорошо, я сам нашел ответ.

Я нашел эту строчку на StackOverFlow, попробовал, и она сработала. Написав эту строчку,

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

прямо перед

alertDialog.show();

Надеюсь, это кому-то поможет, и вы не будете страдать так сильно, как я. Это довольно просто, но очень неприятно, если вы пропустите.

person Lev    schedule 20.11.2013
comment
Где вы нашли эту строку в StackOverflow? У вас есть ссылка на оригинал? - person ; 18.07.2014
comment
В то время я был новичком в StackOverflow и не опубликовал ссылку, извините за это. - person Lev; 26.03.2015

Используйте этот стиль в вашем res / values ​​/ style

создание WindowTranparent

    <style name="Theme.Transparent" parent="android:Theme">#03afee
        <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>

Примените это к своему диалогу ...

person nitesh    schedule 19.11.2013
comment
гнида, спасибо за ответ. Я использовал style=@style/Theme.Transparent в LinearLayout моего настраиваемого диалогового окна XML, но мне не повезло. Макет контейнера кнопки по-прежнему имеет белый фон вместо прозрачного. - person Lev; 19.11.2013
comment
@lev добавьте свой фон = @ null и для изображения используйте android: src - person nitesh; 19.11.2013
comment
Я попытался установить нулевой фон в контейнере кнопок LinearLayout, основном макете XML-файла и даже на кнопке. По-прежнему не повезло. - person Lev; 19.11.2013
comment
@lev показать еще немного содержимого xml ... также установите нулевое значение для фона ImageButton и используйте src для изображения, а не для атрибута фона - person nitesh; 19.11.2013
comment
Я добавил весь xml файл к исходному вопросу. - person Lev; 19.11.2013
comment
Я не смог получить желаемых результатов, используя этот подход, поскольку цвет / прозрачный не был полностью прозрачным. вместо этого пришлось использовать диалог - person jordan koskei; 16.05.2014