web-dev-qa-db-ja.com

ScrollViewがまったくスクロールしない

ScrollViewを適切にスクロールできません。通常のLinearLayoutであるかのように、常に下部のコンテンツを切り取ります。

私のコード

<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」プロパティを追加/削除しようとしましたが、何も変更されませんでした。

前もって感謝します。

23
thomaus

回答: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" >

        </LinearLayout>
    </ScrollView>
</LinearLayout>
23
thomaus

選択された回答IS NOT CORRECT!

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"
3
Gutimore

親としてスクロールビューに問題はありません。 scrollviewの直接の子にパディング/マージンを追加すると、このような問題に直面しました。高さと幅のプロパティだけでscrollviewの子を保持します。これで問題なく動作します。

    <ScrollView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:animateLayoutChanges="true"
        Android:fillViewport="true">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:animateLayoutChanges="true"
            Android:orientation="vertical">
</LinearLayout>
</ScrollView>
2
Varun Chandran

LinearLayoutAndroid:isScrollContainerを削除します。ドキュメントによれば、Android:isScrollContainerはビューをスクロール可能に設定するために使用されます。それがあなたのお役に立てば幸いです。定義については、これを参照してください link .

2
TNR

Android Studioは、NestedScrollViewをそのテンプレートの一部(Master-Detailなど)のアクティビティファイルに追加します。フラグメントファイルにScrollViewがあり、そのフラグメントのアクティビティファイルに別のScrollViewがあると、スクロールビューが機能しなくなります。フラグメントファイルのScrollViewを削除し、アクティビティファイルにScrollViewを残しておくと、問題が解決しました。

2
Ocean

これを試して、

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

<LinearLayout Android:id="@+id/scroll_layout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical" >
1
Mayur Dabhi

これで問題が解決しました:Android:isScrollContainer="true"をLinearLayoutに追加し、ScrollViewを削除しましたCode Before:

    <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
Angoranator777

この質問を閉じる方法はありますか?それは古く、現在有効とマークされている回答には意味がありません。現在、ScrollViewに関する唯一の有効なものは次のとおりです。

内部に配置されたビュー階層をスクロールできるようにするビューグループ。 スクロールビューには、直接子を1つだけ配置できます。スクロールビュー内に複数のビューを追加するには、LinearLayoutなどのビューグループを追加する直接の子を作成し、そのLinearLayout内に追加のビューを配置します。 RecyclerViewまたはListViewをスクロールビューに追加しないでください。これを行うと、ユーザーインターフェイスのパフォーマンスが低下し、ユーザーエクスペリエンスが低下します。

公式ドキュメントから取得: https://developer.Android.com/reference/Android/widget/ScrollView.html

0
Carlos Daniel

このソリューションを試してください。遅延後の方法を使用してスクロールを遅らせるだけです。

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
Ashwin

私は最終的に、すべてを段階的に構築し、すべてのステップを一度にテストするのに文字通り5時間かかると思いました。

とにかくこれに問題がある場合、私はsetOntouchリスナーがコードを台無しにしていることがわかりました-少なくとも私の場合はそうでした...

私はそれを回避する方法を考えなければなりませんが、ontouchリスナーを削除してコードをテストしてみてください-それは動作しなければなりません

0
Jani