如何获取TextView的真实行数?

问题描述 投票:0回答:3

我想知道如何获得

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 或更多。

不知道说清楚了没有。

android textview
3个回答
3
投票

试试这个:

textview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    textview.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    textView.getLayout().getLineCount()            
    }
            });

0
投票

这是一个 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()
}

-1
投票

您可以尝试在文本视图上设置

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())); 
                }
            });
© www.soinside.com 2019 - 2024. All rights reserved.