android - lite - como cambiar los botones de navegacion xiaomi
Cambiar el botón de retroceder a la flecha hacia abajo en la barra de navegación (3)
Como ya se ha respondido, se introducirá en Android O.
Para versiones anteriores, solo es posible para Android 3.x, o 4.4+ utilizando indicadores como SYSTEM_UI_FLAG_IMMERSIVE
, SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
, SYSTEM_UI_FLAG_HIDE_NAVIGATION
, etc. Pero aún muy limitado, poniendo mucho esfuerzo obtiene un resultado no muy amigable o incluso glitchy.
La razón porque no es posible, es porque es un problema de seguridad. Las aplicaciones podrían impedir a los usuarios salir de la aplicación.
Mira estos enlaces:
Estoy usando un AppCompatDialogFragment
para mostrar un BottomSheetDialog
. Al hacer clic en el botón Atrás de la Navigation Bar
cierra el BottomSheetDialog
Quiero cambiar el ícono en la Navigation Bar
del botón de retroceso al ícono de ''flecha hacia abajo''. Esto se hace de manera predeterminada cuando se muestra el teclado y quiero replicarlo para la Hoja inferior.
Para ser claros, aquí lo que tengo:
Y esto es lo que necesito:
Tenga en cuenta que el botón Atrás es una "flecha hacia abajo".
La barra de navegación es un componente del sistema ui y no veo la forma de cambiar su apariencia para que se parezca a la barra de navegación que se muestra cuando el teclado está visible.
En Android O, se introduce el concepto de cambiar el ícono, pero aún es a través de la aplicación de terceros. Barra de navegación personalizada que utiliza WRITE_SECURE_SETTINGS
para cambiar los iconos. En Android O puede cambiar la visualización de la barra, es decir, el tema Claro u Oscuro.
La solución 2 puede ser más de una ayuda para usted. Puede crear una popup window
en la barra de navegación con el diseño deseado, es decir, 3 botones atrás, Aplicaciones recientes y botón de inicio. De esta manera puede cambiar el icono del botón Atrás en consecuencia. Asegúrese de que la ventana emergente tenga la misma altura que la barra de navegación y luego puede crear sus propias funciones para el hogar y las aplicaciones recientes, y en la function
Atrás, puede cerrar su BottomSheetDialog
y eliminar esa ventana emergente.
El siguiente es el código para la tecla de inicio, así como las aplicaciones recientes. Para el botón Atrás, haga lo que quiera lograr con su propio icono.
Para el botón de inicio.
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Para aplicaciones recientes.
Class serviceManagerClass = Class.forName("android.os.ServiceManager");
Method getService = serviceManagerClass.getMethod("getService", String.class);
IBinder retbinder = (IBinder) getService.invoke(serviceManagerClass, "statusbar");
Class statusBarClass = Class.forName(retbinder.getInterfaceDescriptor());
Object statusBarObject = statusBarClass.getClasses()[0].getMethod("asInterface", IBinder.class).invoke(null, new Object[] { retbinder });
Method clearAll = statusBarClass.getMethod("toggleRecentApps");
clearAll.setAccessible(true);
clearAll.invoke(statusBarObject);
Para el botón Atrás // use su ícono y la función de cerrar BottomSheetDialog
Para calcular la altura de la barra de navegación.
public static int getSoftButtonsBarSizePort(Activity activity) {
// getRealMetrics is only available with API 17 and +
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int usableHeight = metrics.heightPixels;
activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int realHeight = metrics.heightPixels;
if (realHeight > usableHeight)
return realHeight - usableHeight;
else
return 0;
}
return 0;
}
También puedes hacerlo con comandos adb
, pero asegúrate de que pueda estropear tu navigationBar
y que no puedas recuperar tu barra de navigationBar
original.
Espero que ayude.
Este artículo describe muy bien cómo se puede hacer en Android Oreo.