Android конвертировать ширину текста (в пикселях) в процент от ширины экрана / высоты
Я измеряю текст строки, чтобы увидеть, должен ли я добавить '\ n' для переноса.
Я использую функцию Paint.measureText, и она работает большую часть времени, но мне кажется, что это не точно, поскольку пиксель не равен dp - я видел в Интернете, как конвертировать пиксели в dp, но вместо этого я бы предпочел конвертировать px в процент от размера экрана, например
если "а" имеет ширину 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%
Это была бы чрезвычайно полезная функция, чтобы иметь под рукой.
3 ответа
Вам нужно будет получить ширину экрана через 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);
}
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 с текстом внутри до (или вместо) рисования его на экране. Таким образом, вы можете установить любой шрифт или textSize для TextView и всегда знать, сколько процентов будет иметь текст на экране.
Вы можете использовать следующие методы для преобразования do в pixel и pixel to dp.
Преобразовать дп в пиксель:
public int dpToPixel(int dp) {
DisplayMetrics dm= getContext().getResources().getDisplayMetrics();
int pixel = Math.round(dp * (dm.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return pixel
}
Преобразовать пиксель в дп:
public int pixelToDp(int pixel) {
DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
int dp = Math.round(pixel / (dm.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return dp;
}