the - navigation view fragment android
Cajón de navegación: deshabilite el clic en los elementos detrás del cajón (5)
Bueno, encontré una solución para este problema. Cuando se abre el cajón, puede llevar la barra de navegación al frente llamando al método bringToFront () en el diseño que usa. Esto asegura que el cajón de navegación se mantenga encima de cualquier contenido subyacente hasta que se haya seleccionado un nuevo elemento.
Es decir:
@Override
public void onDrawerOpened(View drawerView)
{
activity.getActionBar().setTitle("Select content");
activity.invalidateOptionsMenu();
drawerLayout.bringToFront();
}
¿Hay alguna forma de asegurarse de que el cajón de navegación se mantenga en la parte superior del contenido del fragmento?
Creé una pequeña aplicación de prueba con datos ficticios. 10 fragmentos con un botón numerado correspondiente y una vista de texto. El problema es con el hecho de que los elementos de los fragmentos parecen tener mayor prioridad que el cajón de navegación.
Como se ve en la captura de pantalla, una vez que intento abrir el "fragmento 0", opto por registrar el clic en el botón que se encuentra detrás del panel de navegación. Presionar cualquier otro elemento de contenido funciona bien, pero esto es mientras no haya otros elementos interactuantes debajo de ellos. ¿Qué puedo hacer para que el cajón de navegación permanezca correctamente encima del contenido detrás de él?
El problema parece no ser debido al click focus,
Visite https://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout
La vista de contenido principal (FrameLayout anterior) debe ser el primer elemento secundario de DrawerLayout, ya que el orden XML implica ordenación zy el cajón debe estar encima del contenido.
En mi cajón de fragmentos, configuré TouchListener para que devuelva True. Funcionó para mí
mFragmentContainerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
Lo resolví de una manera diferente.
Aquí está mi código para configurar el cajón:
/**
* Setup Navigation Drawer
*/
private void setDrawer() {
NavigationDrawerFragment mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
}
el método de setup
está dentro de mi NavigationDrawerFragment
, aquí está mi código para él:
/**
* Users of this fragment must call this method to set up the navigation drawer interactions.
*
* @param fragmentId The android:id of this fragment in its activity''s layout.
* @param drawerLayout The DrawerLayout containing this fragment''s UI.
* @param toolbar The Toolbar of the activity.
*/
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
View mFragmentContainerView = (View) getActivity().findViewById(fragmentId).getParent();
DrawerLayout mDrawerLayout = drawerLayout;
//noinspection deprecation
mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, "Drawer opened", "Drawer closed") {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (!isAdded()) return;
// Solution:
// Disable click event on views below Navigation Drawer
mFragmentContainerView.setClickable(false);
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!isAdded()) return;
// Solution:
// Enable click event on views below Navigation Drawer
mFragmentContainerView.setClickable(true);
getActivity().invalidateOptionsMenu();
}
};
// Defer code dependent on restoration of previous instance state.
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mActionBarDrawerToggle.syncState();
}
});
//noinspection deprecation
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
}
Eso es
Establezca android:clickable="true"
etiqueta android:clickable="true"
en el diseño del panel deslizante.