2013-07-07 10 views
6

Ich versuche, diese einfachen Dialog semi-transparent zu machen:Wie man dieses einfache Dialogfragment semi-transparent

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(); 

    }   


} 

Das Layout ist wie folgt:

<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> 

ich alles versucht haben, Verwenden Sie ein transparentes .png als Hintergrund, der vom linearen Layout gezeichnet werden kann, setzen Sie das Alpha-Feld auf 0,5, um eine Farbe zu verwenden, die gleich 0 ist. Ich kann diesen Dialog nicht halbtransparent gestalten. Ich weiß nicht einmal, ob es möglich ist. Was ich erstellen möchte, ist ein Dialog wie das Panel in der folgenden Abbildung: semi-transparent control panel. Danke. Anmerkung1: Die min SDK erforderlich ist Version 8, das Ziel ist die neueste (eigentlich v17).

+0

Ich denke, das auf dem abhängen SDK-Version. In 1.6 Dialogen sind standardmäßig semitransparent, aber versuchen Sie 'AlertDialog.Builder (Kontext Kontext, int Thema)' wo Thema ist 'android.R.style.Theme_Dialog. – techiServices

+0

Haben Sie versucht, etwas wie 'android: background =" # 4000 "' in der XML zu verwenden? (# 4000 ist ARGB_4444 Farbraum). – techiServices

+0

Ich habe beide versucht, aber es hat nicht funktioniert. –

Antwort

5

Statt:

return builder1.create(); 

Versuchen Sie, diese setzen:

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

Wo sollte ich diesen Code setzen? –

+0

Ich habe meine Antwort bearbeitet. –

+0

Es hat nicht funktioniert. Der Dialog ist immer schwarz wie die Hölle! Sehen Sie sich mein Postupdate an, um zu sehen, wie ich der Dialog sein möchte. –

0

Sie können auf Ihrem Dialogfragmentverweis eines dieser beiden Themen versuchen.

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

oder

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

Hope this helfen.

0

können Sie versuchen, den Hintergrund transparent zu machen, verwenden Sie diese Option, wenn Sie Superklasse ist ein Dialog:

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

oder dies, falls Sie Ihre Superklasse ist ein DialogFragment:

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

Meine andere Lösung war ähnlich wie "kaushal trivedi". Mit 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); 
    } 
} 

Das macht Ihren Dialog Vollbild und ohne Hintergrund sein, Sie können so setzen, was auch immer Sie in ihm wollen.

+0

Dies ist keine praktikable Lösung, wenn Sie einen Abstand zwischen dem Dialogfeld und dem Fenster wünschen. – plopd

0

Versuchen Sie, diese

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; 
} 

Sie

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

in onCreateView Ihr Dialog ist auch setzen könnte.

0

Dies habe ich mit AlertDialog gemacht, um Transluzenz zu erreichen.

Erstellt ein benutzerdefinierter Stil:

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

und erstellen Sie dann den Dialog mit:

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

Link zu meiner Antwort auf eine ähnliche Frage: https://stackoverflow.com/a/36311627/4344057