我在Android N上使用更改的显示缩放计算显示尺寸时出现问题。
使用Android N,您可以更改显示缩放(选中here)
但是如果用户从Android设置设置缩放,显示尺寸(... getSize())不会改变...
有什么想法解决它吗?我是否要使用px中的大小乘以scaledDensity来获得真实的显示尺寸?
我的应用程序动态创建以px计算屏幕尺寸的窗口和组件,组件是在服务器上设计的。
简单地说,我按照服务器上设置的宽度和智能手机屏幕的宽度进行数学比例:
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
display.getRealSize(sizePoint);
}else{
display.getSize(sizePoint);
}
int smartphoneDisplayWidth = sizePoint.x;
int smartphoneDisplayHeight = sizePoint.y;
int serverDisplayWidth = 720px; //this come from the server
int serverComponentWidth = 720px; //this come from the server
int smartphoneComponentWidth = (smartphoneDisplayWidth/serverDisplayWidth)*serverComponentWidth;
//ex: smartphoneComponentWidth = (1080/720)*720 = 1080; the component widht on the smartphone will be 1080px.
如果我设置较小的变焦我有这个问题:
默认:
的小:
窗户组件要小:
px中的宽度不会改变,它只会改变密度:
小
DisplayMetrics{density=2.2250001, width=1080, height=1813, scaledDensity=2.2250001, xdpi=422.03, ydpi=424.069}
默认
DisplayMetrics{density=2.625, width=1080, height=1794, scaledDensity=2.625, xdpi=422.03, ydpi=424.069}
大
DisplayMetrics{density=2.875, width=1080, height=1782, scaledDensity=2.875, xdpi=422.03, ydpi=424.069}
大
DisplayMetrics{density=3.125, width=1080, height=1770, scaledDensity=3.125, xdpi=422.03, ydpi=424.069}
最大
DisplayMetrics{density=3.375, width=1080, height=1758, scaledDensity=3.375, xdpi=422.03, ydpi=424.069}
答案 0 :(得分:1)
您应该使用dp值而不是px创建视图。当密度发生变化时(如在nugat设置中),您会在第二个屏幕中看到结果。
你可能会创建这样的布局:
int screenWidth = <value>;
LayoutParams lp = new LayoutParams(screenWidth, 200);
view.setlayoutparams(lp);
你应该使用密度:
float sampleDensity = 2f; // get from DisplayMetrics
int screenWidth = <value>;
LayoutParams lp = new LayoutParams((int) (screenWidth * sampleDensity), 200);
view.setlayoutparams(lp);
其他原因可能是您在配置更改后未更新布局。更好的解决方案是在LayoutParams中使用MATCH_PARENT
和WRAP_CONTENT
。它更方便快捷的解决方案。