2014-08-07 4 views
13

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

Вот код обряду 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

* Edit **** ** Код для макета вкладки 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 или мой код макета.

+0

Опубликовать R.layout.tabs xml –

+0

@Rod_Algonquin Я добавил код – superuserdo

ответ

67

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

+0

Спасибо! Ваш ответ - это конец моих 3-х дней, чтобы исправить эту проблему. Отлично. – superuserdo

+0

@superuserdo Я помню этот вопрос раньше. :)) –

+0

@Rod_Algonquin +1 up ... очень вспомнил ....... –

5

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

<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)); 
+0

Результат будет таким же с этим стилем. – superuserdo

+0

Java-код работал для меня. Проблема была на белом фоне на леденец. Ницца! – sud007

+0

Код 'style' помогите мне спасибо: D – medo

0

В вашем 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"> 
+0

Это также не имеет никакого эффекта. Его правда, макет прозрачный, но фон за макетом черный. – superuserdo

Смежные вопросы