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.
- Android canvas drawText establecer el tamaño de la fuente de la anchura?
- Expectativa de puntero nulo al obtener valores de preferencia compartida
- Android Pay: Public, Generación de pares de claves privadas (Curva elíptica con NISTP-256)
- ¿Cómo resolver AVD rotación automática tema de la pantalla en android 4.4.2?
- Telephony.Sms.Inbox.PERSON utiliza Contacts.People._ID obsoletos
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(); } }
EDITAR
Después de quitar StatusBarTransparency de v21-styles se ve así
- La creación de un JSON con Gson hace que la aplicación se bloquee
- ¿Cómo olvidar una red inalámbrica en android mediante programación?
- Detección de colisiones con polígonos
- Cómo borrar la animación en android?
- No se pudieron resolver todas las dependencias para la configuración ': app: _debugApkCopy'
- URLConnection getContentLength () devuelve un valor negativo
- Cliente Android / socket de servidor Java; Android enviar pero no recibir?
- Java.lang.RuntimeException: La aplicación "org.eclipse.ui.ide.workbench" no se pudo encontrar en el registro
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.
- Rendimiento del dispositivo virtual Android
- Android Pay: Public, Generación de pares de claves privadas (Curva elíptica con NISTP-256)