2012-12-02 11 views
6

Ho bisogno di mostrare una finestra di dialogo personalizzata nella mia applicazione Android. La progettazione standard AlertDialog non è accettabile. docs Android dicono:sfondo finestra di dialogo personalizzata Android

Suggerimento: se si desidera una finestra di dialogo personalizzato, è possibile invece visualizzare un'attività come una finestra invece di utilizzare le API di dialogo. Basta creare un'attività e impostare il suo tema Theme.Holo.Dialog nell'elemento manifesta:

Questo è tutto. L'attività ora viene visualizzata in una finestra di dialogo invece di a schermo intero.

Sembra promettente. L'ho fatto, ma la trasparenza non funziona! Sfondo è sempre grigio:

enter image description here

Ecco un disc nel manifesto:

<activity 
    android:name=".MyDialogActivity" 
    android:screenOrientation="portrait" 
    android:theme="@android:style/Theme.Holo.Dialog.NoActionBar" > 
</activity> 

Ecco una radice della mia attività:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:background="#00000000" 
    android:layout_width="400dp" 
    android:layout_height="wrap_content" > 

    // Content ... // 

</RelativeLayout> 

ho provato anche android:background="@null" - effetto era lo stesso Se io uso android:background="#ff0000" allora è rosso (come dovrebbe essere). Ma come faccio a renderlo trasparente?

Aggiornamento

ho finito con

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

risposta

5

make tema come questo

<style name="ThemeDialogCustom"> 
<item name="android:windowFrame">@null</item> 
<item name="android:windowIsFloating">true</item> 
<item name="android:windowContentOverlay">@null</item> 
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
<item name="android:windowBackground">@color/transparent</item> 
<item name="android:colorBackgroundCacheHint">@null</item> 
</style> 
+1

La ringrazio molto per un'idea. La soluzione "così com'è" ha generato un'eccezione, quindi ho ereditato il tema da "android: Theme.Holo.Dialog.NoActionBar". Ho aggiornato la mia domanda per mostrare la soluzione. – Nick

3

Try ...

È possibile evitare lo sfondo grigio come questo, Qui ho ottenuto uno sfondo trasparente.

........ 
    Dialog dialog = new Dialog(MainActivity.this); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    Window window = dialog.getWindow(); 
    window.setBackgroundDrawableResource(android.R.color.transparent); 
    dialog.setContentView(R.layout.popup_layout); 
    Button dialogBtn= (Button) dialog.findViewById(R.id.btn); 

    dialogBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //task 
     } 
    }); 
    dialog.show(); 
    ....... 
2
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
+0

Amo questa risposta. C'è qualcosa come un attributo del tema Dialog per cancellare questo oscuramento? –

Problemi correlati