2013-02-11 8 views
15

Я не могу правильно прокрутить прокруткуПросмотра. Он всегда отсекает содержимое внизу, как если бы это был обычный LinearLayout.ScrollView не прокручивается вообще

Мой код

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" > 

    <LinearLayout android:id="@+id/scroll_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:isScrollContainer="true" 
     android:orientation="vertical" > 

Конечно, я уже пытался добавить/удалить «fillViewport» и «свойства isScrollContainer», и ничего не изменилось.

Заранее спасибо.

+0

пожалуйста, вы можете вставить полный XML, может быть, это что-то связано с вашим LinearLayout. – PaNaVTEC

+0

Попробуйте изменить 'android: layout_height =" match_parent "' на 'android: layout_height =" 0dp "и добавить' android: layout_weight = "1" 'в' ScrollView'. –

+0

Просто попробовал и не повезло. – thomaus

ответ

19

Ответ: ScrollView не работает при использовании в качестве корневого элемента XML-макета. Он должен быть обернут внутри LinearLayout.

Решение затем:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ScrollView android:id="@+id/scroll_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true" > 

     <LinearLayout android:id="@+id/scroll_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 
+47

это не работает для меня ... – Ciprian

+0

Вы уверены? !! –

+1

+1 Действительно работа для меня, спасибо. –

2

удалить android:isScrollContainer в LinearLayout. В соответствии с документацией android:isScrollContainer используется для прокрутки представления. Надеюсь, это поможет вам. Для определения см. Это link.

2

Android Studio добавляет NestedScrollView к файлу активности некоторых из его шаблонов (например, Master-Detail). Наличие ScrollView в файле фрагмента и другое в файле активности этого фрагмента препятствует работе прокрутки. Удаление ScrollView в моем файле фрагмента и оставление файла в файле активности решило проблему для меня.

0

Попробуйте это решение, просто задержите свой свиток, используя метод post delayed.

fragment_test.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rootRelativeLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:fresco="http://schemas.android.com/apk/res-auto"> 

    <ScrollView 
     android:id="@+id/scrollView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="40dp" 
     android:fillViewport="true" 
     android:scrollbars="none"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
      ... 
     </RelativeLayout> 

    </ScrollView> 

</RelativeLayout> 

TestFragment.java

... 
private ScrollView mScrollView; 
... 
mScrollView = (ScrollView) mView.findViewById(R.id.scrollView); 
mScrollView.setSmoothScrollingEnabled(true); 
... 
new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     if(isAdded()) { 
      // Scroll 1000px down 
      mScrollView.smoothScrollTo(0, 1000); 
     } 
    } 
}, 150); 

Это работает для меня, надеюсь, что это помогает.

0

Это фиксированная моя проблема: я добавил android:isScrollContainer="true" к LinearLayout и Убрана Scrollview код Перед:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
<ScrollView 
    android:id="@+id/scrollViewRecords" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 

    <LinearLayout 
     android:id="@+id/sheepList" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

    </LinearLayout> 
</ScrollView> 
</LinearLayout> 

Код После

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:isScrollContainer="true"> 

    <LinearLayout 
     android:id="@+id/sheepList" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

    </LinearLayout> 
</LinearLayout> 
0

Есть ли способ, чтобы закрыть этот вопрос? он старый, и в настоящее время ответ, обозначенный как действительный, не имеет смысла. Единственная действительная вещь, касающаяся ScrollView прямо сейчас, такова:

Группа просмотра, которая позволяет прокручивать иерархию вида, расположенную внутри нее. Вид прокрутки может содержать только одного прямого ребенка, помещенного внутри него. Чтобы добавить несколько представлений в представление прокрутки, сделайте прямую дочернюю вас группу добавления, например LinearLayout, и поместите дополнительные виды в этот LinearLayout. Никогда не добавляйте RecyclerView или ListView в прокрутку. Это приводит к плохой производительности пользовательского интерфейса и к плохой работе с пользователем.

Взято из официальной документации: https://developer.android.com/reference/android/widget/ScrollView.html

0

Выбранный ответ не правильно!

Вы можете использовать ScrollView в качестве корневого представления, оно не работает для вас, потому что вам не хватает прокладки.

Добавить что-то вроде:

android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
Смежные вопросы