0

がの直接の子でない場合、TextViewをスクロールして画面の表示領域に入るにはどうすればよいですか?ScrollViewTextViewScrollView

上部にがあり、次にaと下部にあるLinearLayoutビューがあります:TextViewScrollViewButton

<LinearLayout
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_height="wrap_content"/>

    <ScrollView
        android:id="@+id/s"
        android:layout_height="0dip"
        android:layout_weight="1" >

        <TableLayout
            android:id="@+id/t"
            android:layout_height="wrap_content" >

            <TableRow
                android:id="@+id/r" >

                <TextView
                    android:id="@+id/a"/>

                <TextView
                    android:id="@+id/b"/>

                <TextView
                    android:id="@+id/c"/>

            </TableRow>

        </TableLayout>

    </ScrollView>

    <Button
        android:layout_height="wrap_content"/>

</LinearLayout>

これにより、上部の境界にラベル、下部の境界にボタン、およびその間にテーブルが表示された、完全に塗りつぶされた画面が生成されました。このテーブルの行数に応じて、スクロールするかどうかを指定できます。

テーブルの内容はJavaコードによって生成されます。そこに挿入されるものの例として、1行を追加しました。

次に、垂直方向にスクロールして、特定の行(必ずしも最後の行である必要はありません)が表示されることを確認する必要があります。sからまでのすべての要素にアクセスできますが、スクロールcを作成するためのコードをまったく理解できません。ScrollView s

requestChildRectangleOnScreen私は、、、scrollByを試しscrollToましたが、おそらく常に間違った引数を使用していました。

TextView aのところ、垂直方向の中央にあるか、下または上の境界にあるかは関係ありません。それがまったく表示されていれば、確かに素晴らしいでしょう。Xスクロールは、理想的には0のままにする必要があります(つまり、左端の位置)。

TableRowこれが重要な場合:この関数は、ユーザーが画面にxまでスクロールするように指示する特別なインテントを使用して画面に入るときにのみ呼び出されます(最新の変更を表示するだけです)。

さらに詳しい情報が必要な場合は、お問い合わせください。

ありがとうございました!

4

1 に答える 1

0

問題は確かに、のサブ呼び出しから直接関数を呼び出したことでしonCreateた。これは、レイアウトがまだ行われていないことを意味します。したがって、すべてのスクロールは、要素の高さが高くなる前に行われ、0ピクセルずつスクロールされました。

解決策は次を使用することView.post(Runnable r)です:

ScrollView s = (ScrollView) findViewById(R.id.s);
TextView a = (TextView) findViewById(R.id.a);
s.post(new Runnable() {
    public void run() {
        int[] location = new int[2];
        a.getLocationInWindow(location);
        int y = location[1];
        s.getLocationInWindow(location);
        s.scrollTo(0, y-location[1]); // or some other calculation
    }
});
于 2012-12-23T02:07:40.293 に答える