我希望在画布上以编程方式绘制一个 SeekBar
。 我编写了根据设备密度设置 SeekBar
的 LayoutParams 的代码。 我正在使用基于设备密度的 switch case,例如:
final DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
if(metrics.densityDpi <= DisplayMetrics.DENSITY_LOW){
zoomBarParams = new LinearLayout.LayoutParams(18,
LayoutParams.FILL_PARENT);
} else if (metrics.densityDpi <= DisplayMetrics.DENSITY_MEDIUM){
zoomBarParams = new LinearLayout.LayoutParams(24,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_HIGH){
zoomBarParams = new LinearLayout.LayoutParams(24,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XHIGH){
zoomBarParams = new LinearLayout.LayoutParams(31,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XXHIGH){
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XXXHIGH){
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
} else {
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
}
但是在像三星Note 5、Galaxy S6 Edge这样的高端设备上却不起作用。我相信这些设备属于XXXHIGH密度范围,那为什么它不起作用呢?在画布上绘制时,设备密度和屏幕大小之间有关系吗?非常感谢任何帮助。
densityDpiValue
不能保证完全等于DisplayMetrics
常量指定的密度之一。比如说,如果你得到了密度值为321
,它将不会触发任何一个情况。考虑检查范围。 - Dmitry Zaytsevswitch
解决什么问题?为什么不使用dp
值呢? - Dmitry Zaytsev