54

解決できない問題があります。ScrollView内にはLinearLayoutしかありません。ユーザーアクションによって、このLinearLayoutに2つのTextViewをプログラムで追加していますが、デフォルトでは、スクロールは一番上に留まります。ユーザーアクションを制御するので、次のように簡単に一番下までスクロールできます。

ScrollView scroll = (ScrollView) this.findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());

しかし、実際にはそうではありません。これは、この2つの新しい要素を追加した直後に、getBottom()が前の2つを返すためです。呼び出している状態を更新しようとしましたrefreshDrawableState()が、機能しません。

いくつかの要素を追加した後、どのようにしてScrollViewの実際の下部を取得できるか考えていますか?

4

7 に答える 7

135

メッセージキューを使用する必要があります。そうしないと機能しません。これを試して:

scrollView.post(new Runnable() {
    @Override
    public void run() {
        scrollView.fullScroll(ScrollView.FOCUS_DOWN);
    }
});

これが私のために働いたものです。

于 2012-04-18T20:31:10.823 に答える
81

これは実際にはあなたの質問に答えません。しかし、それはほとんど同じことを行う代替手段です。

画面の下部までスクロールする代わりに、フォーカスを画面の下部にあるビューに変更します。

つまり、次のように置き換えます。

scroll.scrollTo(0, scroll.getBottom());

と:

Footer.requestFocus();

ビュー、たとえば「フッター」がフォーカス可能であることを指定してください。

android:focusable="true"
android:focusableInTouchMode="true"
于 2012-05-05T05:18:20.853 に答える
19

これで大丈夫です

scrollView.post(new Runnable() {
    @Override

    public void run() {

        scroll.scrollTo(0, scroll.getBottom());

    }
});
于 2012-06-25T09:55:49.077 に答える
5

試しましたscroll.fullScroll(View.FOCUS_DOWN)か?

于 2011-11-04T21:50:43.613 に答える