Полосы прокрутки в TextView - PullRequest
       0

Полосы прокрутки в TextView

2 голосов
/ 20 декабря 2010

Я просто не хотел использовать ScrollView. Поэтому у меня есть текстовое представление с включенными вертикальными полосами прокрутки.

<TextView
    android:id="@+id/tv_service_ticketinfo_details"
    android:layout_width="fill_parent"
    android:layout_height="150dp"           
    android:textColor="@color/black"
    android:autoLink="web"
    android:scrollbars="vertical"
    android:text="empty"
    android:background="@drawable/custom_shape_grey">
</TextView>

Проблема в том, что полосы прокрутки прокручиваются только для текстов, содержащих веб-ссылки. Для других текстов я вижу полосу прокрутки, но не могу прокручивать.

Я не могу это объяснить. А ты?

UPD:

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

Ответы [ 3 ]

4 голосов
/ 21 июня 2011

Так что я думаю, что проблема в том, что TextViews не прокручиваются автоматически, просто потому, что вы установили android: полосы прокрутки.Вы должны установить ScrollingMovementMethod.

Однако, когда вы используете автоссылку и ссылки найдены, фреймворк Android установит MovementMethod для вас.Вот почему поведение отличается.

Есть два решения, которые работают для меня.

После того, как мы установим наш текст, принудительно установите метод перемещения, поддерживающий ссылки и прокрутку.

final TextView output = (TextView) findViewById(R.id.output);
output.setText(content);
// ensure that text will scroll with or without linked text
output.setMovementMethod(LinkMovementMethod.getInstance());

Или установите метод перемещения, предполагая открытый текст, перед добавлением текста в TextView.Если autoLink обнаружит ссылки, он изменит сам метод движения.

final TextView output = (TextView) findViewById(R.id.t_output);
// ensure that text defaults to scrollable
output.setMovementMethod(ScrollingMovementMethod.getInstance());
output.setText(content);

(К вашему сведению: я использую android:autoLink="all")

1 голос
/ 18 апреля 2011

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

xml:

<LinearLayout
        android:id="@+id/view1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">   
          <TextView
                   android:id="@+id/tv_service_ticketinfo_details"
                   android:layout_width="fill_parent"
                   android:layout_height="150dp"           
                   android:textColor="@color/black"
                   android:autoLink="web"
                   android:scrollbars="vertical"
                   android:text="empty"
                   android:background="@drawable/custom_shape_grey">
          </TextView>
   </LinearLayout>

java:

mTextViewPort = (LinearLayout) findViewById(R.id.view1);
// Create a ScrollView instance
ScrollView mScrollView = new Scrollview(mContext);
// here mContext would be Activity's context. You may also choose
// mScrollView as a global variable.
mScrollView.setScrollBarStyle(SCROLLBARS_OUTSIDE_INSET);
mTextViewPort.addView(mScrollView,
    new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
TextView mTextView = (TextView) findViewById(R.id.tv_service_ticketinfo_details);
mScrollView.addView(mTextView );

Это может помочь решить эту проблему.

1 голос
/ 20 декабря 2010

добавьте это в свой код (может быть в onCreate)

//textView.setMovementMethod(ScrollingMovementMethod.getInstance()); 
tv_service_ticketinfo_details.setMovementMethod(ScrollingMovementMethod.getInstance()); 

и тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...