Несколько прокручиваемых текстовых представлений внутри ScrollView - PullRequest
2 голосов
/ 01 марта 2012

У меня есть ScrollView, который содержит комплекс LinearLayout с различными элементами, среди которых есть несколько TextView с определенным maxHeight и длинным текстом внутри. Мне нужно включить прокрутку текста внутри TextView при касании и перетаскивании внутри него и обычную прокрутку ScrollView при нажатии и перетаскивании за пределы них.

Есть ли правильный и элегантный способ сделать это - если это вообще возможно - или мне нужно испачкаться и начать переопределять обработчики onTouchEvent на всех задействованных элементах?

UPD 1: Судя по этому , элегантного решения не существует, и пользовательский интерфейс придется переосмыслить, чтобы включить только один слой прокручиваемых элементов.

Ответы [ 3 ]

5 голосов
/ 04 марта 2012

Так что это не красиво, но вы можете выйти из TextView и заблокировать прокрутку от прокрутки. Это не так хорошо, если ваши текстовые представления не достаточно велики. После использования этого решения мы обнаружили, что лучше всего иметь ярлык «показать больше», на который пользователи могут нажать, чтобы показать все. В любом случае, расширьте из TextView и переопределите метод onTouchEvent:

  public boolean onTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
      this.getParent().requestDisallowInterceptTouchEvent(true);
    }
    if (ev.getAction() == MotionEvent.ACTION_UP) {
      this.getParent().requestDisallowInterceptTouchEvent(false);
    }

    return super.onTouchEvent(ev);
  }
0 голосов
/ 01 марта 2012

вы можете увидеть APIdemos для получения дополнительной информации, в тех же окнах есть представление большого количества текста с их собственным стилизованным просмотром прокрутки. Для получения дополнительной информации вы можете посетить:

http://developer.android.com/resources/samples/ApiDemos/index.html

0 голосов
/ 01 марта 2012

ScrollView - это FrameLayout, то есть вы должны поместить в него одного потомка, содержащего все содержимое для прокрутки;этот потомок сам может быть менеджером макета со сложной иерархией объектов.Дочерний элемент, который часто используется, - это LinearLayout в вертикальной ориентации, представляющий вертикальный массив элементов верхнего уровня, по которым пользователь может прокручивать.

 <ScrollView   
    android:id="@+id/ScrollView01"  
  android:layout_height="150px"   
  android:layout_width="fill_parent">  

   <TextView   
   android:id="@+id/TEXT_VIEW"   
   android:layout_height="wrap_content"   
   android:layout_width="wrap_content"   
   android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" />  
 </ScrollView>  
...