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」プロパティを追加/削除しようとしましたが、何も変更されませんでした。
前もって感謝します。
回答: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>
選択された回答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"
親としてスクロールビューに問題はありません。 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>
LinearLayout
のAndroid:isScrollContainer
を削除します。ドキュメントによれば、Android:isScrollContainer
はビューをスクロール可能に設定するために使用されます。それがあなたのお役に立てば幸いです。定義については、これを参照してください link .
Android Studioは、NestedScrollViewをそのテンプレートの一部(Master-Detailなど)のアクティビティファイルに追加します。フラグメントファイルにScrollViewがあり、そのフラグメントのアクティビティファイルに別のScrollViewがあると、スクロールビューが機能しなくなります。フラグメントファイルのScrollViewを削除し、アクティビティファイルにScrollViewを残しておくと、問題が解決しました。
これを試して、
<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" >
これで問題が解決しました: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>
この質問を閉じる方法はありますか?それは古く、現在有効とマークされている回答には意味がありません。現在、ScrollViewに関する唯一の有効なものは次のとおりです。
内部に配置されたビュー階層をスクロールできるようにするビューグループ。 スクロールビューには、直接子を1つだけ配置できます。スクロールビュー内に複数のビューを追加するには、LinearLayoutなどのビューグループを追加する直接の子を作成し、そのLinearLayout内に追加のビューを配置します。 RecyclerViewまたはListViewをスクロールビューに追加しないでください。これを行うと、ユーザーインターフェイスのパフォーマンスが低下し、ユーザーエクスペリエンスが低下します。
公式ドキュメントから取得: https://developer.Android.com/reference/Android/widget/ScrollView.html
このソリューションを試してください。遅延後の方法を使用してスクロールを遅らせるだけです。
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);
これは私のために働いた、これが役立つことを願っています。
私は最終的に、すべてを段階的に構築し、すべてのステップを一度にテストするのに文字通り5時間かかると思いました。
とにかくこれに問題がある場合、私はsetOntouchリスナーがコードを台無しにしていることがわかりました-少なくとも私の場合はそうでした...
私はそれを回避する方法を考えなければなりませんが、ontouchリスナーを削除してコードをテストしてみてください-それは動作しなければなりません