8

問題:ScrollViewは、特定の高さを超えると、子ビューの上部を非表示にします。

XMLで定義された次のレイアウトがあります

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:id="@+id/commandPanel"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:paddingLeft="5dip"
        android:paddingRight="5dip" >

        <Button
            android:id="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="OK" />

        <Button
            android:id="@+id/button2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Back" />
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/mainContentPanel"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@id/commandPanel"
        android:background="@android:color/white" >

        <ScrollView
            android:id="@+id/formScrollView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_marginTop="5dip"
            android:layout_weight="1"
            android:background="@android:color/darker_gray"
            android:fillViewport="false"
            android:paddingBottom="5dip"
            android:scrollbarStyle="insideOverlay" >

            <LinearLayout
                android:id="@+id/formContentLayout"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_gravity="center"
                android:layout_marginTop="20dip"
                android:background="@android:color/black"
                android:gravity="center_horizontal|top"
                android:orientation="vertical"
                android:paddingLeft="5dip"
                android:paddingRight="5dip"
                android:paddingTop="20dip" >

                <LinearLayout
                    android:id="@+id/tr"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dip"
                    android:orientation="horizontal" >

                    <TextView
                        android:id="@+id/title"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:text="sample title" />

                    <TextView
                        android:id="@+id/value"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:text="sample value ......." />
                </LinearLayout>
            </LinearLayout>
        </ScrollView>
    </RelativeLayout>

</RelativeLayout>

----------コード------

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.scrollview);
    updateUi();
}

//add few more rows here
void updateUi() {
    LinearLayout sampletr = (LinearLayout) findViewById(R.id.tr);
    LinearLayout contentPane = (LinearLayout) findViewById(R.id.formContentLayout);
    TextView title = (TextView) findViewById(R.id.title);
    TextView value = (TextView) findViewById(R.id.value);
    for (int i = 0; i < 25; i++) {
        LinearLayout tr = new LinearLayout(this);
        TextView t = new TextView(this);
        t.setText("Sample title : " + i);
        TextView v = new TextView(this);
        v.setText("Sample value : " + i);

        tr.addView(t, title.getLayoutParams());
        tr.addView(v, value.getLayoutParams());
        contentPane.addView(tr, sampletr.getLayoutParams());
    }
}

ここで、LinearLayout(ScrollViewの直接の子)の一番上の行は、ない場合は上から消え始めます。行の数が15を超えます!さらに、手動で上にスクロールして表示することもできません。ポインタを入力してください。このレイアウトの何が問題になっていますか?

4

5 に答える 5

30

わかりました。LinearLayout(ScrollViewの子)から次の行を削除して解決しました。

android:layout_gravity="center"

ScrollViewが完全に機能するようになりました。提案してくれてありがとう。

于 2012-05-29T13:08:42.257 に答える
0

RelativeLayout2番目のノードを削除しますが、を保持しScrollViewます。次に、ScrollView私はとを追加layout_alignParentTop=truelayout_above="@+id/commandPanel"ます。2つ目RelativeLayoutは冗長に見えるため、通常、子をに追加する場合RelativeLayoutは、コンテナのレイアウトオプション、つまり、layout_above、below、alignなどを使用する必要があります。

于 2012-05-29T11:47:46.547 に答える
0

パディングトップに問題があるようです。最初に取り外してみてください。

于 2012-05-29T11:48:18.447 に答える
0

jusはlilchangeを使用してxmlを記述します

<LinearLayout
    android:id="@+id/commandPanel"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:paddingLeft="5dip"
    android:paddingRight="5dip" >

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="OK" />

    <Button
        android:id="@+id/button2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Back" />
</LinearLayout>

<RelativeLayout
    android:id="@+id/mainContentPanel"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_above="@id/commandPanel"
    android:background="@android:color/white" >

    <ScrollView
        android:id="@+id/formScrollView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center"

        android:layout_marginTop="0dp"    <--- --- change n remove this margin

        android:layout_weight="1"
        android:background="@android:color/darker_gray"
        android:fillViewport="false"
        android:paddingBottom="5dip"
        android:scrollbarStyle="insideOverlay" >

        <LinearLayout
            android:id="@+id/formContentLayout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_marginTop="20dip"
            android:background="@android:color/black"
            android:gravity="center_horizontal|top"
            android:orientation="vertical"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:paddingTop="20dip" >

            <LinearLayout
                android:id="@+id/tr"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dip"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/title"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="sample title" />

                <TextView
                    android:id="@+id/value"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="sample value ......." />
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</RelativeLayout>

于 2012-05-29T11:56:50.667 に答える
0

android:gravity="center"親の線形レイアウト内に線を追加するだけでscrollView、問題は解決しました。

于 2020-12-24T14:36:58.623 に答える