Я пытаюсь получить правильную ширину для TextView
, чтобы она соответствовала ABC
тексту, используя Paint.getTextBounds () , но она возвращает меньшую ширину для такого содержимого, поэтому недостаточно места для последний символ C
.
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 () , чем работает нормально:
private fun getTextViewWidth(text: String, textView: TextView): Int {
return textView.paint.measureText(text).roundToInt()
}