Получить правильную ширину для TextView, используя Paint.getTextBounds () - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь получить правильную ширину для TextView, чтобы она соответствовала ABC тексту, используя Paint.getTextBounds () , но она возвращает меньшую ширину для такого содержимого, поэтому недостаточно места для последний символ C.

enter image description here

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val text = "ABC"

        val textView = TextView(this).apply {
            setBackgroundColor(Color.GREEN)
            maxLines = 1
        }

        textView.layoutParams = FrameLayout.LayoutParams(
                getTextViewWidth(text, textView), // width
                FrameLayout.LayoutParams.MATCH_PARENT // height
        )

        textView.text = text

        val parentLayout = findViewById<FrameLayout>(R.id.parent_layout)
        parentLayout.addView(textView)
    }

    private fun getTextViewWidth(text: String, textView: TextView): Int {
        val bounds = Rect()
        textView.paint.getTextBounds(text, 0, text.length, bounds)
        return bounds.width()
    }
}

План действий:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_layout"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"/>

Как это исправить?

Обновление

Кажется, лучше использовать Paint.measureText () , чем работает нормально:

- List item

private fun getTextViewWidth(text: String, textView: TextView): Int {
    return textView.paint.measureText(text).roundToInt()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...