2016-06-20 13 views
5

Ho creato un DialogFragment "a schermo intero", in cui ho aggiunto uno sfondo nero-tranparent. Il risultato finale è visibile nello screenshot qui sotto:Finestra di dialogo frammento schermo intero di Android Bug

enter image description here

Ecco come ho fatto:

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Dialog dialog = super.onCreateDialog(savedInstanceState); 
     dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     return dialog; 
    } 



    @Override 
    public void onStart() { 
     super.onStart(); 
     Dialog dialog = getDialog(); 
     if (dialog != null) { 
      dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
      dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
     } 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      // if >= LOLLIPOP, then I color the the statusbar 
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      dialog.getWindow().setStatusBarColor(SOME_COLOR_HERE); 
     } 

    } 

@Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogFullScreen); 
    } 

Questo è il tema ho impostato su setStyle():

<style name="DialogFullScreen"> 
    <item name="android:windowIsFloating">false</item> 
    <item name="android:windowContentOverlay">@null</item> 
</style> 

E questo è il layout che gonfio per il frammento:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="br.com.emotiondigital.sempreeditora.Fragments.LockedContentFragment" 
android:id="@+id/popup_parent_layout"> 


<LinearLayout 
    android:clickable="true" 
    android:id="@+id/popup_black_bg" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#b9000000"/> 

<RelativeLayout 
    android:id="@+id/popup_main_layout" 
    android:clickable="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:background="@android:color/white" 
    android:elevation="10dp" 
    android:layout_marginBottom="70dp" 
    android:layout_marginTop="70dp" 
    > 


    <LinearLayout 
     android:layout_alignTop="@+id/bg_popup" 
     android:layout_alignBottom="@+id/bg_popup" 
     android:layout_alignRight="@+id/bg_popup" 
     android:layout_alignLeft="@+id/bg_popup" 
     android:background="@color/bg_grey" 
     android:layout_width="280dp" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="51dp" 
      android:orientation="vertical" 
      android:background="@android:color/white" 
      android:elevation="2dp" 
      > 

      <TextView 
       android:id="@+id/selectNewspaperText" 
       android:layout_width="wrap_content" 
       android:layout_height="50dp" 
       android:gravity="center" 
       android:text="@string/selecione_jornal" 
       android:layout_marginLeft="15dp" 
       android:textSize="20dp" 
       android:textColor="@color/colorPrimary" 
       /> 

      <LinearLayout 
       android:orientation="vertical" 
       android:id="@+id/topLine" 
       android:layout_width="match_parent" 
       android:layout_height="1dp" 
       android:background="@color/colorPrimaryDark"/> 

     </LinearLayout> 

     <android.support.v7.widget.RecyclerView 
      android:overScrollMode="ifContentScrolls" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/recyclerViewJornais" 
      /> 

     <LinearLayout 
      android:orientation="vertical" 
      android:id="@+id/bottomLine" 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="@color/colorPrimaryDark"/> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:orientation="horizontal"> 

      <Button 
       android:id="@+id/btnCancelar" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:background="@android:color/white" 
       android:textColor="@color/colorPrimary" 
       android:text="@string/cancelar"/> 

      <Button 
       android:id="@+id/btnOk" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:textColor="@android:color/white" 
       android:background="@color/colorPrimary" 
       android:text="@string/ok"/> 

     </LinearLayout> 




    </LinearLayout> 



</RelativeLayout> 

Quelle le immagini erano da una Xperia Z3 con sistema operativo Android 5.1 Questo sta lavorando bene su molti dispositivi, testato anche su alcuni di fascia bassa Samsung 4.2 dispositivi. Il problema è che non funziona su un Nexus 4, anche con Android 5.1. Sul Nexus 4, sembra che la trasparenza non funzioni e la vista viene replicata più volte sullo sfondo. Ecco uno screenshot:

enter image description here

Ecco un altro confronto tra l'Xperia Z3 e il Nexus 4:

enter image description here

enter image description here

ciò che sta accadendo sul Nexus 4? Qualsiasi aiuto è apprezzato!

+0

Questo è uno strano problema grafico, ma perché stai utilizzando una finestra di dialogo a "schermo intero" in primo luogo? Sembra che tu stia semplicemente replicando il comportamento predefinito di una finestra di dialogo (le finestre di dialogo attenuano lo sfondo per impostazione predefinita). – Bryan

+0

@Bryan Mi piace controllare tutti gli aspetti della mia vista. Ad esempio, in questo modo posso controllare lo sfondo come una vista e animarne l'opacità in runtime. Lo uso per creare alcuni effetti interessanti. –

risposta

0

Creare un layout personalizzato per la finestra di dialogo, quindi utilizzare il codice riportato di seguito in onCreate o al primo del metodo di dialogo.

Dialog dialog = new Dialog(context); 
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.your_dialog_layout); 
     dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 

Il suo lavoro per me. Ho usato un metodo per creare una finestra di dialogo a schermo intero.

Problemi correlati