Как определить количество строк, видимых в TextView?

как узнать сколько строк отображается в видимой части TextView? Я использую текст, который не полностью помещен в TextView на каждом разрешении экрана.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/logs_text"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

String s = "very big text"
TextView logText = (TextView) view.findViewById(R.id.logs_text);
logText.setText(s);     

2 ответов


android.текст.Макет содержит эту информацию и многое другое. Использовать textView.getLayout().getLineCount() для получения количества строк.

будьте осторожны, что getLayout() может возвратить null если вызывается до завершения процесса компоновки. Звоните getLayout() после onGlobalLayout() или onPreDraw() of ViewTreeObserver. Е. Г.

textView.getViewTreeObserver().addOnPreDrawListener(() -> {
    final int lineCount = textView.getLayout().getLineCount();
});

если вы хотите только видимый счетчик строк, вы, вероятно, должны использовать подход, упомянутый в ответе ниже:

есть ли способ получить видимую строку TextView счет или расстояние?


попробуйте что-то вроде этого:

        <EditText
            android:id="@+id/edt_obs"
            android:layout_width="0dip"
            android:layout_weight="75"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dip"
            android:inputType="textCapCharacters|textMultiLine"
            android:scrollHorizontally="false" 
            android:gravity="top|left"
            android:lines="2" 
            android:singleLine="false"
            android:background="@android:drawable/edit_text"
            android:textColor="@color/Black"
            android:textCursorDrawable="@color/Black"
        />

С

            android:lines="2" 

мой EditText получает пространство для 2 строк, после этого поле получает прокрутку. Не забудьте использовать

            android:singleLine="false"

Я не тестировал с TextView, но я думаю, что это сработает.