2013-07-07 12 views
6

che sto cercando di fare questa semplice finestra di dialogo semitrasparente:Come rendere questo semplice frammento di finestra semi-trasparente

class TestDialog extends SherlockDialogFragment 
{ 


    public TestDialog() 
    { 
    super();   
    } 




    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceStateBundle) 
    { 

    AlertDialog.Builder builder1 = new AlertDialog.Builder(getActivity()); 
    // Get the layout inflater 
    LayoutInflater inflater1 = getActivity().getLayoutInflater(); 

    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder1.setView(inflater1.inflate(R.layout.dlg_test, null)) 
    // Add action buttons 
    .setPositiveButton("Ok", new DialogInterface.OnClickListener() 
    { 

     @Override  
     public void onClick(DialogInterface dialog, int id)   
     {   
      // sign in the user ...      
     } 


    }) 
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
     {  
       @Override 
     public void onClick(DialogInterface dialog, int id)    
     {   

     }   
     }); 

     return builder1.create(); 

    }   


} 

La disposizione è la seguente:

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

    <TextView 
     android:id="@+id/username" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="16dp" 
     android:layout_marginLeft="4dp" 
     android:layout_marginRight="4dp" 
     android:layout_marginBottom="4dp" 
     android:hint="User name" /> 

</LinearLayout> 

Ho provato di tutto, dall'utilizzo di una .png trasparente come sfondo disegnabile del layout lineare, all'impostazione del campo alfa a 0.5, all'utilizzo come disegnabile di un colore uguale a 0. Non riesco a rendere tale finestra semitrasparente. Non so nemmeno se sia possibile. Quello che vorrei creare è una finestra di dialogo come il pannello nell'immagine seguente: semi-transparent control panel. Grazie. Nota 1: il min sdk richiesto è la versione 8, il target è l'ultimo (in realtà, v17).

+0

Penso che questo può dipendere dal Versione SDK. In 1.6 le finestre di dialogo sono semitrasparenti di default, ma provate 'AlertDialog.Builder (Contesto contesto, tema int)' dove tema è 'android.R.style.Theme_Dialog. – techiServices

+0

Hai provato a utilizzare qualcosa come 'android: background =" # 4000 "' nell'XML? (# 4000 è ARGB_4444 colorspace). – techiServices

+0

Ho provato entrambi ma non ha funzionato. –

risposta

5

Invece di:

return builder1.create(); 

provare a mettere questo:

Dialog dialog = builder1.create(); 
Drawable d = new ColorDrawable(Color.BLACK); 
d.setAlpha(130); 
dialog.getWindow().setBackgroundDrawable(d); 
return dialog; 
+0

Dove devo inserire quel codice? –

+0

Ho modificato la mia risposta. –

+0

Non ha funzionato. Il dialogo è sempre nero come l'inferno! Guarda il mio post update per vedere cosa vorrei essere il dialogo. –

0

Si può provare uno qualsiasi di questi due temi sul vostro riferimento frammento di dialogo.

yourdialogFragment.setStyle(style,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen); 

o

yourdialogFragment.setStyle(style,android.R.style.Theme_Holo_Light_Dialog); 

Spero che questo vi aiuterà.

0

Si può provare a fare lo sfondo trasparente, utilizzare questo se super-classe è una finestra:

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

o questo se la classe Super è un DialogFragment:

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

mia altra soluzione era simile a "kaushal trivedi". Uso DialogFragments:

public class MyDialogFragment extends DialogFragment { 

... 

    @Override 
    public void onCreate(Bundle savedInstance){ 
    super.onCreate(savedInstance); 
    setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen); 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.my_dialog, container,false); 
    } 
} 

Questo rende il dialogo sia a schermo intero e senza fondo, in modo da poter mettere quello che volete al suo interno.

+0

Questa soluzione non è valida se si desidera un margine tra la finestra di dialogo e la finestra. – plopd

0

Prova questa

public class Dialogs extends DialogFragment { 

    public Dialogs() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style. Theme_WallpaperSettings); 
    } 
} 
1
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
    return dialog; 
} 

Si potrebbe mettere

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

nel onCreateView del dialogo pure.

0

Questo è quello che ho fatto per ottenere la traslucenza con AlertDialog.

creato uno stile personalizzato:

<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert"> 
    <item name="android:colorBackground">#32FFFFFF</item> 
</style> 

e quindi creare la finestra di dialogo con:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog); 
AlertDialog dialog = builder.create(); 

Link alla mia risposta a una domanda relativa: https://stackoverflow.com/a/36311627/4344057

Problemi correlati