我想知道如何获得
TextView
的行数。
我的意思是,我知道他们有以下代码:
textview.setText(“Some text”);
textview.post(new Runnable() {
@Override
public void run() {
int lineCount = textview.getLineCount();
logw("Test", "Number of line :" + lineCount);
}
});
在这里您可以找到我的 XML:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="3"
android:text="Procedente igitur mox tempore cum adventicium nihil inveniretur, relicta ora maritima in Lycaoniam adnexam Isauriae se contulerunt ibique densis intersaepientes itinera pr"/>
但问题是:
在我的 XML 中,我放置了
setMaxLine = 3
所以在方法 run 中,它总是返回 3 行,而不是 4 - 5 或更多。
不知道说清楚了没有。
试试这个:
textview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
textview.getViewTreeObserver().removeOnGlobalLayoutListener(this);
textView.getLayout().getLineCount()
}
});
这是一个 Kotlin 挂起扩展函数,仅当
getLayout()
不为 null 时才返回;即,每当 TextView
已成功布局时。
suspend fun TextView.countLines(): Int {
return withContext(Dispatchers.Default) {
// Wait until the layout is not null
while (layout == null) {
delay(10)
}
layout.lineCount
}
}
用途:
CoroutineScope(Main).launch {
val textView: TextView = ...
val nLines = textView.countLines()
}
您可以尝试在文本视图上设置
addTextChangedListener
,如下所示:
textview.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
// perform your process
Log.e("line count", String.valueOf(textview.getLineCount()));
}
});