with the studio llamar from fragments ejemplo desde con activity android android-fragments navigation-drawer click-through

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?



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.