获取文本和TextView绑定之间的空间

时间:2016-05-14 01:58:19

标签: android android-layout android-custom-view

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

enter image description here

我想获得红色条的距离(此红色条不是布局的一部分)以使蓝色按钮居中。我该怎么办? 暗区代表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)
  }

}

感谢。

2 个答案:

答案 0 :(得分:2)

我的另一个解决方案是:

  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。您如何看待这种方法?

答案 1 :(得分:1)

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

第一个参数是从零开始的行号,第二个参数是Rect对象,它将在调用后保存给定行的边界值。 left的{​​{1}}字段将具有该行的水平插入,您可以使用该绘制圆的半径来计算其中心的x坐标。