2013-07-07 7 views
6

próbuję uczynić ten prosty Dialog półprzezroczyste:Jak zrobić ten prosty fragment dialogowe półprzezroczyste

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

    }   


} 

Layout jest następujący:

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

Próbowałem wszystkiego, od użycia przezroczystego .png jako tła do rysowania układu liniowego, do ustawienia pola alfa na 0.5, do użycia jako drawowalnego koloru równego 0. Nie jestem w stanie uczynić tego okna półprzezroczystym. Nie wiem nawet, czy to możliwe. To, co chciałbym stworzyć, to okno dialogowe, takie jak panel na następującym obrazku: semi-transparent control panel. Dzięki. Uwaga1: wymagana min. SDK to wersja 8, cel jest najnowszy (w rzeczywistości, v17).

+0

myślę, że może to zależeć od Wersja SDK. W 1.6 dialogach domyślnie są półprzezroczyste, ale spróbuj 'AlertDialog.Builder (kontekst kontekstowy, int motywu)' gdzie motyw to 'android.R.style.Theme_Dialog. – techiServices

+0

Czy próbowałeś użyć czegoś w stylu 'android: background =" # 4000 "' w XML? (# 4000 to przestrzeń kolorów ARGB_4444). – techiServices

+0

Próbowałem obu, ale to nie zadziałało. –

Odpowiedz

5

Zamiast:

return builder1.create(); 

Spróbuj umieścić to:

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

Gdzie powinienem umieścić ten kod? –

+0

Edytowałem swoją odpowiedź. –

+0

To nie zadziałało. Dialog jest zawsze czarny jak diabli! Spójrz na moją aktualizację posta, aby zobaczyć, co chciałbym być dialogiem. –

0

Można spróbować każdy z tych dwóch tematów na dialogowego odniesienia fragmentów.

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

lub

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

nadzieję, że pomoże.

0

Można spróbować czyniąc tło przezroczyste, to wykorzystać, jeśli Super klasa jest okno dialogowe:

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

lub tego, czy Super klasa jest DialogFragment:

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

Moje inne rozwiązanie było podobny do "kaushal trivedi" jeden. Korzystanie 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); 
    } 
} 

To sprawia, że ​​dialog będzie na pełnym ekranie i bez tła, dzięki czemu można umieścić cokolwiek chcesz wewnątrz niego.

+0

To nie jest opłacalne rozwiązanie, jeśli chcesz zachować margines między oknem a oknem. – plopd

0

Spróbuj

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

Można umieścić

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

w onCreateView Twojego okna dialogowego, jak również.

0

To właśnie zrobiłem, aby uzyskać półprzezroczystość z AlertDialog.

Utworzono niestandardowy styl:

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

a następnie utworzyć dialog:

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

link do mojego odpowiedź na powiązane pytanie: https://stackoverflow.com/a/36311627/4344057