El cuadro de diálogo de pantalla completa de Android aparece transparente y en la posición incorrecta

Estoy tratando de añadir un diálogo a mi aplicación Android que es pantalla completa en dispositivos pequeños (por ejemplo, teléfono móvil), pero un diálogo estándar en dispositivos grandes (por ejemplo, tabletas). Esto sigue la lógica establecida en la especificación de diseño del material .

Usando la guía oficial de diálogo de Android , usando un DialogFragment, termino con un diálogo transparente que superpone la barra de acción:

Introduzca aquí la descripción de la imagen

A continuación se muestra el código fuente.

Main.xml

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.CoordinatorLayout android:id="@+id/toolbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- Use ThemeOverlay to make the toolbar text white --> <android.support.design.widget.AppBarLayout android:id="@+id/abl_top" android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:fitsSystemWindows="true" android:layout_height="wrap_content" android:layout_width="match_parent" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="wrap_content"/> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="10dp" android:src="@drawable/ic_add" android:clickable="true"/> </android.support.design.widget.CoordinatorLayout> 

MainActivity.java

 package com.example.fsdialog; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.view.View; public class MainActivity extends AppCompatActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Setup AppBar Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); } final ActionBar ab = getSupportActionBar(); ab.setHomeAsUpIndicator(R.drawable.ic_menu); ab.setDisplayHomeAsUpEnabled(true); // FAB FloatingActionButton fab = (FloatingActionButton) findViewById( R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { FragmentManager fm = getSupportFragmentManager(); MyDialogFragment dialog = new MyDialogFragment(); if (false) { // The device is using a large layout, so show the fragment // as a dialog dialog.show(fm, "MyDialogFragment"); } else { // The device is smaller, so show the fragment fullscreen FragmentTransaction tx = fm.beginTransaction(); tx.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); // To make it fullscreen, use the 'content' root view as // the container for the fragment, which is always the root // view for the activity tx.add(R.id.content, dialog) .addToBackStack(null).commit(); } } }); } } 

Mi_dialog.xml

 <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:rowCount="2" android:columnCount="2"> <TextView android:id="@+id/text_date1" android:layout_row="0" android:layout_column="0" android:text="17/06/2015" style="@android:style/Widget.Holo.Spinner"/> <TextView android:id="@+id/text_time1" android:layout_row="0" android:layout_column="1" android:text="09:35" style="@android:style/Widget.Holo.Spinner"/> <TextView android:id="@+id/text_date2" android:layout_row="1" android:layout_column="0" android:text="17/06/2015" style="@android:style/Widget.Holo.Spinner"/> <TextView android:id="@+id/text_time2" android:layout_row="1" android:layout_column="1" android:text="11:00" style="@android:style/Widget.Holo.Spinner"/> </GridLayout> 

MyDialogFragment.java

 package com.example.fsdialog; import android.app.Dialog; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.View; import android.view.ViewGroup; import android.view.LayoutInflater; import android.view.Window; public class MyDialogFragment extends DialogFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.my_dialog, container, false); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); return dialog; } } 

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.fsdialog" android:versionCode="1" android:versionName="1.0"> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> <activity android:name="MainActivity" android:label="@string/app_name" android:theme="@style/Theme.AppCompat.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

ACTUALIZACIÓN 1 (24-06-2015)

Ahora estoy usando el tema Android Theme.AppCompat.NoActionBar y tengo un FrameLayout en la actividad principal. Todavía tengo el mismo problema (imagen actualizada).

  • ¿Está mal para mí asumir que el tema incorporado contendrá un color de fondo para el diálogo? ¿Sabes, un defecto sano? Sé con seguridad que si sólo muestro un diálogo de la forma normal se obtiene un color de fondo.
  • Supongo que el CoordinatorLayout que he añadido hace que el cuadro de diálogo se superponga a la barra de acción, aunque estoy usando un FrameLayout incrustado. ¿Porqué es eso? Necesito el CoordinatorLayout así que el FloatingActionButton está en la posición correcta.

@cutoff estaba correcto. Mi actualización falló porque el diseño de la raíz es un CoordinatorLayout lugar de un LinearLayout o algo igualmente bueno. El ejemplo siguiente usa un DrawerLayout :

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_height="match_parent" android:layout_width="match_parent" android:fitsSystemWindows="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.CoordinatorLayout android:id="@+id/toolbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- Use ThemeOverlay to make the toolbar and tablayout text white --> <android.support.design.widget.AppBarLayout android:id="@+id/abl_top" android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:fitsSystemWindows="true" android:layout_height="wrap_content" android:layout_width="match_parent" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header" app:menu="@menu/nav_view"/> </android.support.v4.widget.DrawerLayout> 

Más detalles sobre esta solución se pueden encontrar en esta pregunta , incluyendo por qué un DialogFragment es insuficiente para otra cosa que completamente a pantalla completa.

  • Android L Vista previa barra de acción color
  • ¿Cuál es la mejor manera de crear una tabla de datos en android?
  • Cómo cambiar el tamaño del icono de elemento de menú en NavigationView?
  • Botones de diseño de material de Android - Pre lollipop
  • Android Lollipop con material tema personalizado Logo no actúa como DrawerToggle
  • Android Design Navigation Drawer - ¿Cómo agregar un conmutador en el navegador xml?
  • Alertdialog en el diseño del material
  • ¿Qué hace TranslationZ realmente en Android?
  • Cómo hacer un diseño de cuadrícula de CardViews con altura variable?
  • Botón sin bordes en Pre-Lollipop con la biblioteca de soporte
  • Vista de Scrollview anidada + Recycler
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.