我有一个没有操作栏的活动,并尝试获得它的高度。
使用分辨率1200x1920
;
使用DisplayMetrics:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenHeight = metrics.heightPixels;
然后screenHeight为1824
。
实际高度(1920
)与screenHeight之间的差异是由于状态栏。
但是当我检查它的根视图时:
final View root = findViewById(R.id.root);
root.post(new Runnable() {
@Override
public void run() {
Log.d("TAG", "Root @w=" + root.getWidth() + " @h=" + root.getHeight());
}});
身高的结果是:1774
。
由于虚拟键(BACK,HOME,SWITCH APP),内容高度小于屏幕高度。
总结:screen height = statusbar height (if have) + actionbar height (if have) + root content height + virtual key height (if have)
因此,如果我们获得内容高度,请不要依赖DisplayMetrics。我认为从根内容中获取高度是最佳解决方案。
嗯,现在是真正的问题:我希望立即获得root内容高度(这意味着不要在Runnable中运行)。有什么建议吗?