当前,我在检测移动设备是否支持android中的缺口显示时遇到问题。
有人可以帮助我吗? (我需要使用android studio中的代码来完成此操作)
谢谢。
答案 0 :(得分:6)
如果您要支持所有操作系统,则某些Oreo设备也会显示缺口,那么您可以使用我的解决方案。根据材料设计指南,Android设备的状态栏高度为24dp。您可以使用以下方法获取设备状态栏的高度和设备密度,并检查状态栏的高度是否大于24dp。如果其高度大于24dp,则显示为缺口,然后您可以根据需要处理视图位置。这也适用于奥利奥(Oreo)。
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
// DP转换为像素
public static int convertDpToPixel ( float dp){
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return Math.round(px);
}
//根据您的要求进行UI调整
if (statusBarHeight > convertDpToPixel(24)) {
RelativeLayout.LayoutParams topbarLp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
topbarlp.setMargins(0, statusBarHeight, 0, 0);
topbar.setLayoutParams(topbarlp)
}
答案 1 :(得分:4)
市场上仅有少数带有notch
的设备,并且目前尚无法检测到设备是否具有带有Android API的陷波屏(Android
但是,作为一种解决方法,请检查设备名称,然后确定它们是否具有槽口,并相应地执行工作,那里有一个可以轻松检测设备名称的库:
https://github.com/jaredrummler/AndroidDeviceNames
但使用Android P Google provided notch support。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
DisplayCutout displayCutout = getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();
}
答案 2 :(得分:1)
您需要使用getDisplayCutout对象的WindowInsets方法。这将为您提供一个DisplayCutout对象,您可以查询该对象以找到显示屏中的“安全”插图。
DisplayCutout类是API级别28中的新增功能,因此您将无法在API级别较低的设备上执行此操作(您可以假定除非API级别> = 28,否则没有缺口)。
有一个指南here。
您可以通过重写View的onApplyWindowInsets方法或实现一个OnApplyWindowInsetsListener类来获取WindowInsets对象。
答案 3 :(得分:1)
我强烈建议使用该库react-native-device-info,因为版本为0.24.0,所以我们使用的函数名hasNotch()
非常有效。在我的生产应用中进行了测试。