2012-03-01 6 views
2

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

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

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

+0

У вас есть исправленное количество текстовых просмотров или динамическое? – mudit

+0

Просто 2. На данный момент. Может быть, в будущем, но макет статичен, если это вопрос. –

ответ

5

Так что это не красиво, но вы можете продлить от TextView и блокировать Scrollview прокрутки. Это не так приятно, если ваши текстовые заметки достаточно велики. После использования этого решения мы обнаружили, что лучше всего, если у вас есть ярлык «показать больше», который пользователи могут щелкнуть, чтобы показать полную информацию. Во всяком случае, простирайтесь от 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

Как вы сказали, это некрасиво, но, похоже, нет другого пути. Спасибо. :) –

0

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> 
+0

Я это знаю. У моего 'ScrollView' есть' LinearLayout' как дочерний элемент, а 'TextView', о котором я говорю, входит в 'LinearLayout'. Но я не могу заставить их иметь собственную прокрутку, свиток «ScrollView» берет верх. Я думал, что может существовать какое-то свойство, которое заставляет обработку прокрутки дочернего элемента иметь приоритет над родительским. –

0

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

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

+0

Единственное, что я могу найти в демонстрационных версиях API, - это 'ScrollView' с динамическим добавлением LinearLayout'. Он не имеет ничего (что я мог видеть), связанного с 'TextView', вложенным внутри' ScrollView'. –

Смежные вопросы