正确方式:
在canvas中使用:paint.measureText(text)
在TextVIEw中使用:textVIEw.getPaint()..measureText(text)
代码示例:
package com.demo.myapplication3;import androID.graphics.Bitmap;import androID.graphics.Canvas;import androID.graphics.Paint;import androID.graphics.Rect;import androID.support.v7.app.AppCompatActivity;import androID.os.Bundle;import androID.text.TextPaint;import androID.util.Log;import androID.util.TypedValue;import androID.vIEw.VIEw;import androID.Widget.TextVIEw;public class MainActivity extends AppCompatActivity { private final String TAG = "MainActivity"; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); canvasMeasure(); textVIEwMeasure(); } private voID canvasMeasure() { String text = "测试:XYZ xyz"; Bitmap bitmap = Bitmap.createBitmap(800, 1000, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(bitmap, 0, 0, null); Paint paint = new Paint(); paint.setTextSize(30); canvas.drawText(text, 100, 100, paint); //1. 粗略计算文字宽度 Log.d(TAG, "measureText=" + paint.measureText(text)); //2. 计算文字所在矩形,可以得到宽高 Rect rect = new Rect(); paint.getTextBounds(text, 0, text.length(), rect); int w = rect.wIDth(); int h = rect.height(); Log.d(TAG, "w=" + w + " h=" + h); //3. 精确计算文字宽度 int textWIDth = getTextWIDth(paint, text); Log.d(TAG, "textWIDth=" + textWIDth); } private static int getTextWIDth(Paint paint, String str) { int iRet = 0; if (str != null && str.length() > 0) { int len = str.length(); float[] wIDths = new float[len]; paint.getTextWIDths(str, wIDths); for (int j = 0; j < len; j++) { iRet += (int) Math.ceil(wIDths[j]); } } return iRet; } private voID textVIEwMeasure() { String text = "测试:XYZ xyz"; TextVIEw textVIEw = findVIEwByID(R.ID.tv_test); textVIEw.setTextSize(TypedValue.COMPLEX_UNIT_PX, 30); textVIEw.setText(text); int spec = VIEw.MeasureSpec.makeMeasureSpec(0, VIEw.MeasureSpec.UnspecIFIED); textVIEw.measure(spec, spec); // getMeasureDWIDth int measureDWIDth = textVIEw.getMeasureDWIDth(); // new textpaint measureText TextPaint newPaint = new TextPaint(); newPaint.setTextSize(30); float newPaintWIDth = newPaint.measureText(text); // textVIEw getPaint measureText TextPaint textPaint = textVIEw.getPaint(); float textPaintWIDth = textPaint.measureText(text); Log.e(TAG, "测试字符串:" + text); Log.e(TAG, "getMeasureDWIDth:" + measureDWIDth); Log.e(TAG, "newPaint measureText:" + newPaintWIDth); Log.e(TAG, "textVIEw getPaint measureText:" + textPaintWIDth); } // print //2021-04-11 12:51:50.428 15976-15976/com.demo.myapplication3 D/MainActivity: measureText=202.0 //2021-04-11 12:51:50.429 15976-15976/com.demo.myapplication3 D/MainActivity: w=200 h=30 //2021-04-11 12:51:50.429 15976-15976/com.demo.myapplication3 D/MainActivity: textWIDth=202 //2021-04-11 12:51:50.430 15976-15976/com.demo.myapplication3 E/MainActivity: 测试字符串:测试:XYZ xyz //2021-04-11 12:51:50.430 15976-15976/com.demo.myapplication3 E/MainActivity: getMeasureDWIDth:202 //2021-04-11 12:51:50.430 15976-15976/com.demo.myapplication3 E/MainActivity: newPaint measureText:202.0 //2021-04-11 12:51:50.430 15976-15976/com.demo.myapplication3 E/MainActivity: textVIEw getPaint measureText:202.0}
总结 以上是内存溢出为你收集整理的Android 如何在不显示文字时获取文字宽度全部内容,希望文章能够帮你解决Android 如何在不显示文字时获取文字宽度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)