samsung quitar programacion poner icono como cajon boton borre aplicaciones android android-actionbar navigation-drawer

programacion - quitar boton aplicaciones android



Deshabilitar el cajón de navegación, alternar el botón de inicio/el indicador de arriba en fragmentos (5)

La puesta en marcha

Tengo una actividad cuyo contentView es una instancia de DrawerLayout , que tiene un cajón de navegación con un indicador del cajón que se muestra en la barra de acciones. La actividad contiene un Fragment , llamémoslo ListFragment , que contiene una lista de opciones. Cuando se hace clic en una opción, reemplazo el ListFragment con un DetailFragment .

En este punto, me gustaría mostrar una opción de navegación "arriba" en lugar del indicador del cajón de navegación. Puedo mostrar el icono "arriba" si deshabilito el indicador del cajón llamando a mDrawerToggle.setDrawerIndicatorEnabled(false) , pero esto solo elimina el ícono del cajón, no elimina la funcionalidad, es decir, cuando hago clic en Cuidado, el cajón de navegación aún está abierto.

Además, en estas subvistas, me gustaría desactivar la apertura del cajón arrastrando desde el borde de la pantalla. He intentado hacer esto llamando a setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) pero parece que no ha deshabilitado esta funcionalidad.

Intenté extender la clase ActionBarDrawerToggle para evitar abrir el cajón cuando se hace clic en el indicador; sin embargo, todo lo que sucede es que se realiza la acción de anulación (la navegación "arriba"), pero el cajón aún se abre .

También implementé los pasos en Cambiar entre la imagen de Android Navigation Drawer y Up caret cuando uso fragmentos . Funciona en la medida en que se muestra el símbolo de intercalación, pero a pesar de anular la funcionalidad del botón de arriba, el menú aún se abre (la aplicación navega hacia atrás, sino que también abre el cajón).

Pregunta

Entonces, para resumir: ¿hay alguna forma (preferiblemente limpia y elegante, pero en este punto iré con hacky) de lograr estas cosas cuando mi raíz de diseño sea un DrawerLayout :

  1. Reemplace el indicador del cajón con un mDrawerToggle.setDrawerIndicatorEnabled(false)) "hacia arriba" (tentativamente posible mediante mDrawerToggle.setDrawerIndicatorEnabled(false))
  2. Evite que el cajón se abra cuando se hace clic en el símbolo de intercalación y, en su lugar, anule con mi propia funcionalidad "arriba"
  3. Evite que el cajón se abra cuando arrastro desde el borde de la pantalla.

Editar

De acuerdo, parece que si ActionBarDrawerToggle AND onOptionsItemSelected , el menú no se abre cuando hago clic en el símbolo de intercalación. Pero aún se abre si arrastro desde el borde. ¡Ayuda!


Basándose en la respuesta de @sonida Y luego de usar los ajustes dados por @ luca992 y @jai.

Intenté los códigos sugeridos anteriormente, pero la flecha "arriba" o "Atrás" en el lado izquierdo de la barra de acciones simplemente no aparecía en mi aplicación. Pero afortunadamente pude arreglar eso.

Tuve que agregar esta línea de código adicional en setNavigationDrawerState () [Ref: android.support.v7.app.ActionBarDrawerToggle.setHomeAsUpIndicator ]

toggle.setHomeAsUpIndicator (R.drawable.ic_keyboard_backspace_white_24dp);

Descargué el dibujable: ic_keyboard_backspace_white_24dp de Material.io

Aquí está el código completo:

MainActivity.java -> onCreate ()

DrawerLayout drawer; ActionBarDrawerToggle toggle; @Override protected void onCreate(Bundle savedInstanceState) { // Start: Code automatically generated by Android Studio super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); drawer = (DrawerLayout) findViewById(R.id.drawer_layout); toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); // End: Code automatically generated by Android Studio // I had to add this listener as the "back" arrow was totally unresponsive // Thanks to @luca992 toggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); // Start: Code automatically generated by Android Studio NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); // End: Code automatically generated by Android Studio // More custom code for other stuff // ... }

MainActivity.java -> setNavigationDrawerState ()

public void setNavigationDrawerState(boolean isEnabled) { if ( isEnabled ) { drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); toggle.setDrawerIndicatorEnabled(true); toggle.syncState(); } else { drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); toggle.setDrawerIndicatorEnabled(false); // the extra line of code goes here toggle.setHomeAsUpIndicator(R.drawable.ic_keyboard_backspace_white_24dp); toggle.syncState(); }

MainActivity.java -> onBackPressed ()

@Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else if(getSupportFragmentManager().getBackStackEntryCount() > 0){ getSupportFragmentManager().popBackStack(); }else { super.onBackPressed(); } }

MainActivity.java -> startFragment () [función ficticia, por ejemplo]

public void startFragment(){ MyFrag myFrag = new MyFrag(); getSupportFragmentManager() .beginTransaction() .replace(R.id.frag_container ,myFrag) .addToBackStack(null) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) .commit(); }

MyFrag.java -> onViewCreated ()

@Override public void onViewCreated (View view, Bundle savedInstanceState){ super.onViewCreated(view, savedInstanceState); // Say, using an implemented interface Make call to MainActivitiy''s setNavigationDrawerState() passing false // setNavigationDrawerState(false) // ... }

MyFrag.java -> onDestroyView ()

@Override public void onDestroyView(){ // Say, using an implemented interface Make call to MainActivitiy''s setNavigationDrawerState() passing true // setNavigationDrawerState(true) super.onDestroyView(); }


Basándose en la respuesta de Sonida. Después de llamar a setDrawerIndicatorEnabled (false), onNavigateUp no se estaba llamando todavía. Entonces, acabo de crear un nuevo OnClickListener que lo llamó:

public void setDrawerState(boolean isEnabled) { if ( isEnabled ) { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); drawerToggle.setDrawerIndicatorEnabled(true); drawerToggle.syncState(); } else { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); drawerToggle.setDrawerIndicatorEnabled(false); drawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onSupportNavigateUp(); } }); drawerToggle.syncState(); } }

también creo

drawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_UNLOCKED);

ha sido depreciado, pero funciona bien sin él.


Código corto

public void setDrawerState(boolean isEnabled) { if ( isEnabled ) { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); drawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_UNLOCKED); drawerToggle.setDrawerIndicatorEnabled(true); drawerToggle.syncState(); } else { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); drawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); drawerToggle.setDrawerIndicatorEnabled(false); drawerToggle.syncState(); } }


Debes deshabilitar deslizar y deshabilitar el botón de inicio de la barra de acciones:

Utilice el siguiente código que se basa en el código ya proporcionado para deshabilitar deslizar

public void setDrawerState(boolean isEnabled) { if ( isEnabled ) { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); mDrawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_UNLOCKED); mDrawerToggle.setDrawerIndicatorEnabled(true); mDrawerToggle.syncState(); getActivity().getActionBar().setHomeButtonEnabled(true); } else { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); mDrawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); mDrawerToggle.setDrawerIndicatorEnabled(false); mDrawerToggle.syncState(); getActivity().getActionBar().setHomeButtonEnabled(false); } }


Esto es solo una parte de la solución a la que llegué, pero fue bastante difícil descubrir este error, así que lo dejo aquí por el bien de la posteridad.

Así es como estaba definiendo el ListView para mi cajón de navegación:

<ListView android:id="@+id/listview_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start|bottom" android:background="#111" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" />

Incluso después de llamar a setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) pude abrir el cajón.

Sin embargo, después de cambiar el layout_gravity para "start" este problema parece estar resuelto.

Pude reproducir este problema en una aplicación de muestra, de solo cajón de navegación, por lo que parece ser un problema reproducible que no es exclusivo de mi situación.