在TextView的文本和边界之间获取空间

我正在尝试获取文本和TextView左侧之间的距离。 它使用属性android:gravity="center"

在这里输入图像描述

我想要得到红色条的距离(这个红色的条不是布局的一部分),以中心的蓝色按钮。 我该怎么办? 黑暗区域代表了TextView的界限。

我不想使用CompoundDrawable,因为这个视图会随机更改按钮的颜色。

视图代码(用Kotlin编写):

 class BallTextView: TextView { private lateinit var ballPaint : Paint private var ballRadius : Float = 10f private var ballColor : Int = Color.BLACK constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) { initializeAttributes(attrs) configBall() } override fun onDraw(canvas: Canvas) { canvas.drawCircle(ballRadius, height.toFloat()/2, ballRadius, ballPaint) super.onDraw(canvas) } fun configBall() { ballPaint = Paint() ballPaint.isAntiAlias = true ballPaint.color = ballColor } fun initializeAttributes(attrs: AttributeSet) { val attributes = context.obtainStyledAttributes(attrs, R.styleable.ball_textview) ballRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, attributes.getFloat(R.styleable.ball_textview_ball_radius, ballRadius), context.resources.displayMetrics) ballColor = attributes.getColor(R.styleable.ball_textview_ball_color, ballColor) } } 

谢谢。

TextView#getLineBounds(int, Rect)方法是你想要的。

第一个参数是基于零的行号,第二个参数是一个Rect对象,它将在调用之后保存给定行的边界值。 Rectleft字段会有水平线,你可以用你的圆的半径来确定它的中心的x坐标。

我另一个解决方案是:

  override fun onDraw(canvas: Canvas) { if (xPosition == 0f) { xPosition = (width - paint.measureText(text.toString())) / 3 } canvas.drawCircle(xPosition, height.toFloat()/2, ballRadius, ballPaint) super.onDraw(canvas) } 

@MikeM。 你对这种方法有什么看法?