Делаем TextView прокручиваемым на Android - PullRequest
694 голосов
/ 17 ноября 2009

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

Вот код:

final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent e) {
        Random r = new Random();
        int i = r.nextInt(101);
        if (e.getAction() == e.ACTION_DOWN) {
            tv.setText(tips[i]);
            tv.setBackgroundResource(R.drawable.inner);
        }
        return true;
    }
});
setContentView(tv);

Ответы [ 27 ]

0 голосов
/ 16 февраля 2019

Попробуйте это:

android:scrollbars = "vertical"
0 голосов
/ 05 ноября 2018

XML - Вы можете использовать android:scrollHorizontally Атрибут

Допускается ли текст шире, чем вид (и, следовательно, его можно прокручивать горизонтально).

Может быть логическим значением, например, "true" или "false".

Приграмакалий - setHorizontallyScrolling(boolean)

0 голосов
/ 12 июля 2018

всякий раз, когда вам нужно использовать ScrollView в качестве родителя , а также использовать метод перемещения прокрутки с TextView.

И когда вы портретируете для устройства вашего ландшафта, в это время возникают некоторые проблемы . (например) вся страница прокручивается, но метод перемещения прокрутки не может работать.

если вам все еще нужно использовать ScrollView в качестве родительского метода или метода прокрутки, то вы также используете ниже desc.

Если у вас нет проблем, используйте TextText вместо TextView

см. Ниже:

<EditText
     android:id="@+id/description_text_question"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@null"
     android:editable="false"
     android:cursorVisible="false"
     android:maxLines="6"/>

Здесь EditText ведет себя как TextView

И ваша проблема будет решена

0 голосов
/ 06 июня 2018

У меня была эта проблема, когда я использовал TextView внутри ScrollView. Это решение сработало для меня.

scrollView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                description.getParent().requestDisallowInterceptTouchEvent(false);

                return false;
            }
        });

        description.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                description.getParent().requestDisallowInterceptTouchEvent(true);

                return false;
            }
        });
0 голосов
/ 13 мая 2018

Поместите maxLines и scrollbars в TextView в xml.

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="vertical"
    android:maxLines="5" // any number of max line here.
    />

Тогда в коде Java.

textView.setMovementMethod(new ScrollingMovementMethod());

0 голосов
/ 23 марта 2017

В моем случае. Схема ограничения. AS 2.3.

Реализация кода:

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

XML:

android:scrollbars="vertical"
android:scrollIndicators="right|end"
0 голосов
/ 21 декабря 2014

Я боролся с этим больше недели и наконец понял, как заставить это работать!

Моя проблема заключалась в том, что все будет прокручиваться как «блок». Сам текст прокручивался, но скорее как кусок, чем строка за строкой. Это, очевидно, не работает для меня, потому что это будет отрезать линии внизу. Все предыдущие решения не помогли мне, поэтому я разработал собственное.

Вот самое простое решение на сегодняшний день:

Создайте файл класса с именем: 'PerfectScrollableTextView' внутри пакета, затем скопируйте и вставьте этот код в:

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;

public class PerfectScrollableTextView extends TextView {

    public PerfectScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    public PerfectScrollableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    public PerfectScrollableTextView(Context context) {
        super(context);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if(focused)
            super.onWindowFocusChanged(focused);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

Наконец, измените ваш TextView в XML:

От: <TextView

Кому: <com.your_app_goes_here.PerfectScrollableTextView

...