Делаем 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 ]

10 голосов
/ 20 декабря 2012

Это обеспечит плавную прокрутку текста с полосой прокрутки.

ScrollView scroller = new ScrollView(this);
TextView tv = new TextView(this);
tv.setText(R.string.my_text);
scroller.addView(tv);
8 голосов
/ 27 декабря 2012

Если вы хотите, чтобы текст прокручивался в текстовом представлении, вы можете выполнить следующее:

Сначала вы должны создать подкласс textview.

А потом используйте это.

Ниже приведен пример просмотра подкласса текста.

public class AutoScrollableTextView extends TextView {

    public AutoScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setEllipsize(TruncateAt.MARQUEE);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    public AutoScrollableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setEllipsize(TruncateAt.MARQUEE);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    public AutoScrollableTextView(Context context) {
        super(context);
        setEllipsize(TruncateAt.MARQUEE);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    @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;
    }
}

Теперь вы должны использовать это в XML следующим образом:

 <com.yourpackagename.AutoScrollableTextView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="This is very very long text to be scrolled"
 />

Вот и все.

6 голосов
/ 05 сентября 2014

Добавьте следующее в текстовое представление в XML.

android:scrollbars="vertical"

И, наконец, добавьте

textView.setMovementMethod(new ScrollingMovementMethod());

в файле Java.

6 голосов
/ 15 мая 2011

Я не нашел прокрутки TextView для поддержки жеста «броска», когда он продолжает прокручиваться после пролистывания вверх или вниз. Я сам реализовал это, потому что не хотел использовать ScrollView по разным причинам, и, похоже, не было MovementMethod, который позволял бы мне выделять текст и нажимать на ссылки.

4 голосов
/ 04 июля 2012

Когда вы закончите с прокруткой, добавьте эту строку в последнюю строку представления, когда вы вводите что-либо в представление:

((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
4 голосов
/ 06 января 2014

Добавьте это к вашему XML-макету:

android:ellipsize="marquee"
android:focusable="false"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="To Make An textView Scrollable Inside The TextView Using Marquee"

А в коде нужно написать следующие строки:

textview.setSelected(true);
textView.setMovementMethod(new ScrollingMovementMethod());
3 голосов
/ 27 октября 2012

Если вы не хотите использовать решение EditText, то вам, возможно, повезет больше:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourLayout);
    (TextView)findViewById(R.id.yourTextViewId).setMovementMethod(ArrowKeyMovementMethod.getInstance());
}
2 голосов
/ 24 сентября 2016

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

При добавлении TextView в xml используйте

<TextView android:maxLines="1" 
          android:ellipsize="marquee"
          android:scrollHorizontally="true"/>

Установите следующие свойства TextView в onCreate ()

tv.setSelected(true);
tv.setHorizontallyScrolling(true); 
1 голос
/ 29 мая 2019

В котлине для создания прокручиваемого текста

myTextView.movementMethod= ScrollingMovementMethod()

, а также добавить в xml это свойство

    android:scrollbars = "vertical"
1 голос
/ 06 марта 2017

Используйте это так

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:maxLines = "AN_INTEGER"
    android:scrollbars = "vertical"
/>
...