Вы находите какой-либо ответ? Я застрял с той же проблемой
- personTUSHAR  schedule25.09.2017
comment
@TUSHAR Нет, я до сих пор не могу найти хорошего решения. Я думаю, что Android должен сделать его стандартизированным.
- personSmiles  schedule27.09.2017
comment
С появлением все большего количества полноэкранных телефонов, не только Samsung Galaxy S8/Note8, но и Xiaomi, Huawei и т. д. Если источники Android не сделают его стандартизированным как можно скорее, это может стать серьезной проблемой.
- personSmiles  schedule13.11.2017
Для телефонов Samsung (например, S8, S9 и т. д.) вы можете определить, отображается ли панель навигации, прослушивая событие Samsung.
private static final String SAMSUNG_NAVIGATION_EVENT = "navigationbar_hide_bar_enabled";
Тогда просто слушайте это событие и делайте свое дело:
private void checkNavigationBar() {
if (isSamsungVersionNougat()) { // check if Samsung phones
// detect navigation bar
try {
// there are navigation bar
if (Settings.Global.getInt(activity.getContentResolver(), SAMSUNG_NAVIGATION_EVENT) == 0) {
// Your code
// example: galleryViewModel.navigationBarHeight.set(getNavigationBarHeight());
} else { // there are no navigation bar
// Your code
// example: galleryViewModel.navigationBarHeight.set(0);
}
} catch (Exception ignored) {
}
barHideEnableObserver = new BarHideEnableObserver(new Handler());
activity.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(SAMSUNG_NAVIGATION_EVENT),
true, barHideEnableObserver);
} else {
galleryViewModel.navigationBarHeight.set(getNavigationBarHeight());
}
}
personHaominschedule13.12.2018
comment
У меня сработало, это было единственное решение, которое у нас было для определения высоты полноэкранного окна на телефонах Samsung со складной панелью.
- personhendersawn; 05.04.2019
comment
Любая идея о том, как обнаружить это на устройствах от другого производителя?
- personJohn; 15.07.2019
comment
для разработчиков xamarin с той же проблемой проверьте это - personJohn; 16.07.2019
Используйте этот метод, сработал для меня. Убедитесь, что представление было отрендерено первым, чтобы убедиться, что getHeight() не возвращает 0. Также убедитесь, что используемый вами rootView должен занимать весь экран.
public static boolean hasNavBar (Activity activity, View rootView) {
if (activity == null || rootView == null)
return true;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)
return true;
Display d = activity.getWindowManager().getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
int viewHeight = rootView.getHeight();
if (viewHeight == 0)
return true;
int realHeight = realDisplayMetrics.heightPixels;
return realHeight != viewHeight;
}
personThomas Jansenschedule16.11.2017
comment
Это не работает, когда этот флаг установлен в окне активности: WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
- persondeadmoto; 07.04.2018