Ответ 1
В android O введена концепция изменения значка, но она по-прежнему поддерживается сторонним приложением. Пользовательская панель навигации, которая использует WRITE_SECURE_SETTINGS
для изменения значков.
В Android O вы можете изменить отображение панели i.e Light или Dark theme.
Решение 2 может помочь вам.
Вы можете создать popup window
на панели навигации с нужным расположением, а также 3 кнопки назад, последние приложения и домашнюю кнопку. Таким образом, вы можете соответствующим образом изменить значок кнопки "Назад" . Убедитесь, что всплывающее окно имеет ту же высоту, что и панель навигации, и вы можете сделать свои собственные функции для домашних и последних приложений, а в обратном function
вы можете закрыть свой BottomSheetDialog
и удалить это всплывающее окно.
Ниже приведен код для домашнего ключа, а также последних приложений. Для кнопки "Назад" выполните соответственно то, что вы хотите достичь, со своим собственным значком.
Для кнопки "Главная".
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Для последних приложений.
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);
Для кнопки "Назад" // используем ваш значок и функцию закрытия BottomSheetDialog.
Для расчета высоты навигационной панели
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;
}
вы также можете сделать это с помощью команд adb
, но убедитесь, что это может испортить ваш navigationBar
, и вы не сможете вернуть свой оригинальный navigationBar
.
Надеюсь, это поможет.