我正在测量一个字符串文本,看看我是否应该添加\n
进行包装。
我正在使用Paint.measureText
函数,它大部分时间都可以工作但是我觉得这不准确,因为px不等于dp - 我在网上看过如何转换像素到dp,但我宁愿做的是将px转换为屏幕尺寸的百分比,例如
如果a
宽度为8像素,我该怎么说:
float LetterWidthPercent = _______ //get width of character in percent of screen width
float LetterHeightPercent = _______ //get height of character in percent of screen height
这样我就可以看到:
if (LineOfTextWidth >= ScreenWidth * 0.9f) //90%
这将是一个非常有用的功能,方便。
答案 0 :(得分:1)
您需要通过DisplayMetrics获取屏幕宽度,或者如何......
要获取字符大小,请使用带边界的绘画进行计算。
<强> characterWidth/screenWidth = characterScreenPercentage
强>
我把它变成了双倍但你可以很容易地把它变成浮子。
对于角色:
public Double characterToScreenWidthPercentage(Character c) {
Paint paint = new Paint();
Rect boundA = new Rect();
DisplayMetrics metrics = new DisplayMetrics();
((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getMetrics(metrics);
paint.getTextBounds(Character.toString(c), 0, 1, boundA);
Log.v("fn", Integer.toString(boundA.width()));
Log.v("fn", Integer.toString(metrics.widthPixels));
Log.v("fn", Double.toString((float) boundA.width() / (float) metrics.widthPixels));
return ((double) boundA.width() / (double) metrics.widthPixels);
}
对于字符串:
public Double stringToScreenWidthPercentage(String str) {
Paint paint = new Paint();
Rect boundA = new Rect();
DisplayMetrics metrics = new DisplayMetrics();
((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getMetrics(metrics);
paint.getTextBounds(str, 0, 1, boundA);
Log.v("fn", Integer.toString(boundA.width()));
Log.v("fn", Integer.toString(metrics.widthPixels));
Log.v("fn", Double.toString((float) boundA.width() / (float) metrics.widthPixels));
return ((double) boundA.width() / (double) metrics.widthPixels);
}
答案 1 :(得分:1)
public static double measureWeightPercent(Context context, String textToMeasure) {
DisplayMetrics metrics = new DisplayMetrics();
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getMetrics(metrics);
TextView view = new TextView(context);
view.setText(textToMeasure);
view.measure(metrics.widthPixels, metrics.heightPixels);
double textWidth = view.getMeasuredWidth();
return textWidth / (metrics.widthPixels / 100);
}
您可以在屏幕上绘制之前(或替代)在文本中使用文本测量TextView。通过这种方式,您可以为TextView设置任何字体或textSize,并始终知道文本在屏幕上的百分比。
答案 2 :(得分:0)
您可以使用以下方法将do转换为像素和像素转换为dp。
将dp转换为像素:
public int dpToPixel(int dp) {
DisplayMetrics dm= getContext().getResources().getDisplayMetrics();
int pixel = Math.round(dp * (dm.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return pixel
}
将像素转换为dp:
public int pixelToDp(int pixel) {
DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
int dp = Math.round(pixel / (dm.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return dp;
}