Как я полностью предотвратить прокрутку текстового просмотра?
-
21-12-2019 - |
Вопрос
У меня есть текстовый просмотр с большим количеством текста.Этот текстовый просмотр имеет набор maxLines
, поэтому он показывает только первые 8 или около того строки.У меня также есть кнопка «Подробнее», поэтому я справляюсь с расширением TextView самостоятельно.
Моя проблема в том, что иногда текстовый просмотр немного прокручивается (всего в половине линии за раз), хотя я никогда не указывал никаких полос прокрутки.Эта проблема становится все хуже, потому что TextView находится внутри ListView, поэтому, когда пользователь прокручивает главный список ListView, TextView иногда прокручивается, как это:
Как мне предотвратить прокрутку текстового просмотра?
Решение
У меня такая же проблема, мое решение создает noscrolltextView расширяет текстовый просмотр, как это
public class NoScrollTextView extends TextView {
public NoScrollTextView(Context context) {
super(context);
}
public NoScrollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NoScrollTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public NoScrollTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void scrollTo(int x, int y) {
//do nothing
}
}
.
Установите Scroltto ничего не делать
в Котлин:
class NonScrollingTextView : TextView {
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {
}
override fun scrollTo(x: Int, y: Int) {
//do nothing
}
}
. Другие советы
Так что я сделал небольшое исследование, и я не думаю, что это так же просто, как просто отключение прокрутки, но есть несколько вещей, которые вы можете сделать / попробовать.
Первый заселен (false), но это отключит ссылки и изменяют цвет текста.
Второй, который я предлагаю пытаться, использует Scroltto (INT X, INT Y).Просто прокрутите (0,0) после установки текста текстового представления, мое предположение - это большой текст - это единственное, что вызывает прокрутку, чтобы это должно было позаботиться об этом.
Третий ответ, который я обнаружил, что вы можете попробовать немного сложнее, а не совсем ваш вопрос, но он может работать для вас можно найти здесь .
public class LinkMovementMethodOverride implements View.OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event) {
TextView widget = (TextView) v;
Object text = widget.getText();
if (text instanceof Spanned) {
Spanned buffer = (Spanned) text;
int action = event.getAction();
if (action == MotionEvent.ACTION_UP
|| action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(off, off,
ClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
// Selection only works on Spannable text. In our case setSelection doesn't work on spanned text
//Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
}
return true;
}
}
}
return false;
}
}
.
"После этого примените его к цели TEXTVIEW AS TOCK LISSITER: -
TextView.SetOntouchListener (новый linkmovementmethodoverride ()); "
Мне нужна была функция, как увидеть больше в моем проекте, и я использовал Ellipsing TextView от этогоПочта.Он работает как очарование, а также обеспечивает интерфейс для проверки, был ли текст эллипсирован.Это должно сделать трюк.
Просто используйте setminlines () для всегдаОтображение целого текста
Попробуйте эти строки кода в XML
android:isScrollContainer="false"
android:ellipsize="end"
.