2009-12-10 13 views
27

ho creato un AlertDialog utilizzando AlertDialog.Builder, ma il confine di dialogo prende troppo spazio sullo schermo. Come rimuovo il confine? Ho provato a utilizzare un'altra attività per emulare la finestra di dialogo con uno sfondo trasparente, ma la finestra di dialogo viene utilizzata ripetutamente e la creazione di una nuova attività ogni volta introduce una quantità significativa di lag.Android senza bordi Dialog

La risposta da here indica che può essere trovato in ApiDemos, ma non riesco a trovarlo.

risposta

63

Va bene, risponderò alla mia domanda. Fondamentalmente, invece di usare AlertDialog.Builder, crea una normale finestra di dialogo usando il suo costruttore e usa un tema adatto al posto del tema della finestra di dialogo predefinito.

Così il vostro codice sarebbe simile a questa:

Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar); 

Spero che questo aiuti qualcun altro.

+4

se facciamo questo, allora dialog.setCanceledOnTouchOutside (true); non avrà alcun effetto ... come gestirlo? – amithgc

+0

Questo è esattamente quello che stavo cercando. Sono stato alle prese con il sistema di creazione di dialoghi e dozzine di tutorial mal scritti per ore e la tua unica riga di codice era tutto ciò di cui avevo bisogno. Grazie! – kodi

+3

ma rende la finestra di dialogo a schermo intero .. come per evitare che non sia a schermo intero mentre scrivo il codice sopra – AndroidDev

24

Utilizzando android.R.style.Theme_Translucent_NoTitleBar opere, se si desidera che la finestra sia a schermo intero. Un'alternativa è quella di creare il proprio stile, in questo modo:

<style 
    name="Theme_Dialog_Translucent" 
    parent="android:Theme.Dialog"> 
    <item 
     name="android:windowBackground">@null</item> 
</style> 
+0

+1 Funziona. Grazie Jonasb. –

1

Si può chiedere al costruttore di far rispettare sfondo inversa. Ho lavorato per me per visualizzare uno splash screen senza bordi con una fonte png.

2

ho aggiunto un pixel trasparente per drawable e utilizzare il seguente codice:

dialog.getWindow().setBackgroundDrawableResource(R.drawable.transpix); 
33

Ecco la mia soluzione, per ottenere una finestra di dialogo che mostra solo i tuoi contenuti.

Dialog dialog = new Dialog(this,R.style.ThemeDialogCustom); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

    //you can move the dialog, so that is not centered 
    // dialog.getWindow().getAttributes().y = 50; //50 should be based on density 

    dialog.setContentView(yourLinearLayout); 
    dialog.setCancelable(true); 
    //dialog.setOnCancelListener(cancelListener); 
    dialog.show(); 

themes.xml // situato nel progetto/res/valori

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <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_color</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
    <item name="android:colorBackgroundCacheHint">@null</item> 
    </style> 
</resources> 

colors.xml // trova anche lì

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
     <color name="transparent_color">#00000000</color> 
</resource> 
+4

Questa è una bella soluzione. Risolve perfettamente il problema semplicemente dando il tuo stesso dialogo, MA senza il confine !!! Questa è una soluzione più appropriata di quella accettata. –

+0

Grazie per la soluzione corretta. Inoltre puoi aggiungere dialog.setCanceledOnTouchOutside (true); per chiudere la finestra di dialogo sul lato esterno toccare. –

7

provare questo: D

Dialog popUpView= new Dialog(this); 
popUpView.getWindow().setBackgroundDrawable(new ColorDrawable(0)); 
2

se hai 2 bordi devi usare ContextThemeWrapp er, che mostrerà una sola frontiera come si vorrebbe :)

ContextThemeWrapper wrapper = new ContextThemeWrapper(this, android.R.style.Theme_Holo); 
final LayoutInflater inflater = (LayoutInflater) wrapper.getSystemService(LAYOUT_INFLATER_SERVICE); 
AlertDialog.Builder builder = new AlertDialog.Builder(wrapper); 
0

Nel file risorse creare un file XML denominato per esempio null_image.xml, con il seguente contenuto:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 

<solid android:color="#0000" /> 

<size 
    android:height="1dp" 
    android:width="1dp" /> 

</shape> 

Nel codice Java, prendere la finestra di dialogo e impostare il file XML come risorsa drawable, in questo modo: A seconda del contesto:

Dialog dialog = new Dialog(getContext()); 
Window window = dialog.getWindow(); 
window.setBackgroundDrawableResource(R.drawable.null_image); 

Ecco, divertiti.