9

たとえば、次のようなレイアウトがあります。

<ScrollView>
  <LinearLayout>
    <LinearLayout>
         ...
    </LinearLayout>
    <LinearLayout>
         ...
    </LinearLayout>
    <LinearLayout>
         <TextView>
         </TextView>
    </LinearLayout>
  </LinearLayout>
</ScrollView> 

私のTextViewには長いコンテンツがあります。これで、ScrollViewを手動でTextViewコンテンツの最後までスクロールできます。コードでは、次のように記述します。scrview.scrollTo(0, 800);、scrviewは私のScrollViewです。TextViewコンテンツの中央までスクロールすることになっています。ただし、実行中は、TextViewの先頭までスクロールするだけで、TextViewコンテンツをスクロールすることはできません。

誰かがこの問題の原因を知っていますか?

編集:私はそれを見つけました。scrollToを呼び出すのが早すぎるようです。使用する

scrview.post(new Runnable() {
                public void run() {
                    scrview.scrollTo(0, 800);
                }
            }); 

代わりに、それは動作します。同じ問題を抱えている人のために答えを投稿しました。

4

3 に答える 3

22

見つけた。scrollToを呼び出すのが早すぎるようです。使用する

scrview.post(new Runnable() {
                public void run() {
                    scrview.scrollTo(0, 800);
                }
            }); 

代わりに、それは動作します。同じ問題を抱えている人のために答えを投稿しました。

于 2012-07-04T10:13:46.530 に答える
2

まず、すべてのLinearLayoutの向きが同じである場合、単純に1回だけ作成しないのはなぜですか。私が間違っていなければ、ScrollViewは1つの子(1つの直接の子)しか持つことができません。多分それはおそらくあなたの問題の理由です。ただし、これらの3つのLinearLayoutが必要な場合は、それらを保持する親としてFrameLayoutを作成し、そのFrameLayoutをScrollViewの子にすることができます。

于 2012-06-28T07:52:55.170 に答える
0

scrollToスクロールビューはまだレイアウトされていないため、ランナブルの内部を呼び出す必要があります。ランナブルを使用する場合は、画面の点滅を試すことができます。この問題を解決するには、次のようにスクロールビューでlauyoutの変更をリッスンできます。

scrollview.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                scrollview.scrollTo(x, y)
            }
        });
于 2018-07-25T10:55:48.987 に答える