我的应用程序中有一个视图,该视图随TranslationY一起移动,并且我试图通过获取设备的屏幕尺寸来添加一个选项以将其移动到屏幕底部,但是这种行为确实是跨设备不一致,它可以在各种Pixel手机上完美运行,但是在OnePlus手机和某些高分辨率三星手机上完全消失在屏幕上,但是在低分辨率手机上却显得过高。
我要做的就是获取屏幕高度,减去视图的高度和导航栏的高度,然后将其设置为它的位置:
var barHeight = 0
var metrics = Resources.getSystem().displayMetrics
var size = metrics.heightPixels
return size - barHeight - getNavigationBarHeight()
这也是getNavigationBarHeight:
var metrics = DisplayMetrics()
getWindowManager().getDefaultDisplay().getMetrics(metrics);
var usableHeight = metrics.heightPixels
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
var realHeight = metrics.heightPixels
if (realHeight > usableHeight)
return realHeight - usableHeight
else
return 0
但它似乎永远不会完美地位于底部。这只是DisplayMetrics的怪癖还是有更好的方法呢?
答案 0 :(得分:1)
我无法回答关于displayMetrics的问题,总是预感该设备可以自由提供所需的任何值。例如,某些设备可能包含导航栏的高度,而某些设备可能不包含。我认为这在整个主要制造商中都是一致的,但是从您对OnePlus的评价来看,似乎他们并非如此。
为什么不将ConstraintLayout与其他ConstraintSet一起使用?这是制作动画的最佳和最简单的方法。如果您不介意使用Android Studio 4.1,则也可以选择MotionLayouts。
关于ContraintLayout动画的一篇不错的文章:https://proandroiddev.com/creating-awesome-animations-using-constraintlayout-and-constraintset-part-i-390cc72c5f75