【发布时间】:2011-08-28 00:52:27
【问题描述】:
我似乎无法在不同分辨率的屏幕上将文本定位在相同的位置。问题是文本是浮动的,它不属于任何布局类型的控件。
我尝试将文本放置在与屏幕尺寸相比的相对单位中。例如,我在 X 轴上设置为 50%,在 Y 轴上设置为 67.89%。尽管如此,文本在不同分辨率的屏幕上显示在不同的位置。
所以我在某些分辨率下无法估计位置,这很快就会变得一团糟。
如何在画布上确定一个位置,尽管 DPI / 屏幕尺寸大小相同?
【问题讨论】:
我似乎无法在不同分辨率的屏幕上将文本定位在相同的位置。问题是文本是浮动的,它不属于任何布局类型的控件。
我尝试将文本放置在与屏幕尺寸相比的相对单位中。例如,我在 X 轴上设置为 50%,在 Y 轴上设置为 67.89%。尽管如此,文本在不同分辨率的屏幕上显示在不同的位置。
所以我在某些分辨率下无法估计位置,这很快就会变得一团糟。
如何在画布上确定一个位置,尽管 DPI / 屏幕尺寸大小相同?
【问题讨论】:
使用DisplayMetrics 计算距离。例如,如果您始终希望文本距左侧和顶部 1.5 英寸。
这将适用于您绘制的任何视图或位图。
draw(Canvas canvas){
Matrix identity = new Matrix; // Used to have canvas draw on
Matrix savedMatrix = new Matrix();
canvas.getMatrix(savedMatrix);
canvas.setMatrix(identity);
float y = displayMetrics.ydpi * 1.5;
float x = displayMetrics.xdpi * 1.5;
canvas.drawText(text, x, y + paint.getTextSize(), paint);
canvas.setMatrix(savedMatrix);
}
【讨论】:
DisplayMetrics 类中提供了有关整体显示密度(以及其他指标)的信息。您可以像这样检索它:
void getMetrics(Context context) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
}
http://developer.android.com/reference/android/util/DisplayMetrics.html
您可以像这样缩放所有坐标以考虑屏幕密度:
void scaleForDensity(DisplayMetrics metrics, Point point) {
point.x = (int)(point.x*metrics.density + .5f);
point.y = (int)(point.y*metrics.density + .5f);
}
【讨论】: