Pantalla completa DialogFragment se superpone con StatusBar

Creé un diálogo de pantalla completa con la guía oficial

El problema es que mi barra de herramientas se superpone con la barra de estado y no puedo resolver cómo solucionar esto.

DialogFragment

public class CreateAccountDialogFragment extends BaseDialogFragment { @Inject CreateAccountViewModel viewModel; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //InjectDependencies.... View rootView = createDataBinding(inflater, container); createToolbar(rootView); return rootView; } private View createDataBinding(LayoutInflater inflater, ViewGroup container) { CreateAccountDialogFragmentBinding binding = DataBindingUtil.inflate(inflater, R.layout.create_account_dialog_fragment, container, false); binding.setViewModel(viewModel); return binding.getRoot(); } private void createToolbar(View rootView) { Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar); // Set an OnMenuItemClickListener to handle menu item clicks toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.action_save) { viewModel.createAccount(); } return true; } }); // Inflate a menu to be displayed in the toolbar toolbar.inflateMenu(R.menu.create_account_menu); toolbar.setTitle(R.string.create_account); toolbar.setNavigationIcon(R.drawable.ic_cancel); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialogFragment.dismiss(); } }); } } 

Diseño

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="viewModel" type="org.altoware.weity.viewmodels.CreateAccountViewModel"/> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_light"> <include layout="@layout/toolbar"/> <LinearLayout android:layout_width="250dp" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="vertical"> <org.altoware.weity.views.BindableEditText android:id="@+id/editTextUsername" android:layout_width="match_parent" android:layout_height="wrap_content" android:addTextChangedListener="@{viewModel.onUsernameChanged}" android:hint="Username" android:singleLine="true"/> <org.altoware.weity.views.BindableEditText android:id="@+id/editTextPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:addTextChangedListener="@{viewModel.onPasswordChanged}" android:hint="Password" android:inputType="textPassword" android:singleLine="true"/> </LinearLayout> </RelativeLayout> 

Barra de herramientas

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay" tools:showIn="@layout/activity_login"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"/> </android.support.design.widget.AppBarLayout> 

Diálogo de creación de actividad

 @Subscribe public void showNewAccountDialog(OttoMessages.Login.ShowNewAccountDialog evt) { FragmentManager fragmentManager = getSupportFragmentManager(); CreateAccountDialogFragment newFragment = new CreateAccountDialogFragment(); boolean isLargeLayout = false; if (isLargeLayout) { newFragment.show(fragmentManager, "dialog"); } else { FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); transaction.add(android.R.id.content, newFragment) .addToBackStack(null).commit(); } } 

Captura de pantalla

EDITAR

Después de quitar StatusBarTransparency de v21-styles se ve así Introduzca aquí la descripción de la imagen

Tuve este problema exacto y logré resolverlo. El problema está en la parte transaction.add (containerId, fragment).

Lo tienes establecido en: transaction.add(android.R.id.content, fragment) , y es la configuración de él a android.R.id.content que está causando la superposición.

En su lugar, establézcalo en el id del marco de contenido del padre en la actividad de llamada.

Por ejemplo, en mi código el diseño principal de los padres de la actividad era un DrawerLayout, con el id de drawer_layout, así que mi arreglo era

  MyDialogFragment fragment = new MyDialogFragment (); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); transaction.add(R.id.drawer_layout, frag) .addToBackStack(null).commit(); 

Espero que ayude a usted oa cualquier otra persona que busque esta solución.

Después de quitar el color de la transparencia de la barra de StatusBar encontré, que ahora es posible agregar un relleno sin la barra de estado que va blanca.

El RelativeLayout de mi DialogFragment ahora se parece a esto.

  <RelativeLayout android:paddingTop="24dp" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_light"> 

App / src / main / res / valores-v21 / styles.xml

 <resources>> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <!-- REMOVE THIS LINE <item name="android:statusBarColor">@android:color/transparent</item> --> </style> </resources> 

Advertencia
No he probado esto en otros dispositivos que el Nexus 5.

  • ¿Cómo incluir milisegundos en una cadena de fecha con formato?
  • Android4.4 no puede manejar la intención de sms con "vnd.android-dir / mms-sms"
  • Android Google Maps: Combine scrollBy con zoomBy para pan y zoom simultáneos
  • Alinear la flecha giratoria a la derecha del elemento seleccionado actualmente
  • Error al obtener el método de token de solicitud POST debe tener un cuerpo de solicitud
  • Recuperación del valor nulo de la base de datos Sqlite en android
  • Cómo establecer el texto Min (obligatorio) y el texto máximo en edittext
  • Ejemplo de creación de un sqlite db en memoria en Java (Android)?
  • Validar cadena con regex en android
  • Crashed when applied Barra de herramientas
  • ¿Cómo detectar cuando el teclado de software Android está oculto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.