web-dev-qa-db-ja.com

Android ScrollViewは一番下までスクロールすることを拒否します

相対レイアウトを含むルートscrollview要素と、相対レイアウト内に多数のフォーム要素があります。

どういうわけか、ソフトキーボードが上がっていると、一番下までスクロールできないようで、ボタンの1つが半分になります。

これは、私が何を意味するかを示すための階層ビューアのスクリーンショットです。

enter image description here

ご覧のとおり、システムはビューがキーボードを超えて継続していることを認識していますが、scrollview(画面の表示部分を正しく埋める)は本来のように下にスクロールし続けません。

私が持っています Android:windowSoftInputMode="adjustResize"アクティビティのマニフェストにあり、パンに切り替えることができます/できません。

どんな助けでも大歓迎です。

編集:私はこれを複数のビューで見ています。同じ問題のある別のビューのxmlは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="@drawable/background" >
    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_margin="32dp" >
        <EditText
            Android:id="@+id/reset_oldpass"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentRight="true"
            Android:ems="10"
            Android:singleLine="true"
            Android:hint="@string/current_password"
            Android:layout_marginTop="16dp" />
        <EditText
            Android:id="@+id/reset_pass1"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentRight="true"
            Android:layout_below="@+id/reset_oldpass"
            Android:ems="10"
            Android:hint="@string/reset_new_pass"
            Android:inputType="textPassword"
            Android:layout_marginTop="16dp" />
        <EditText
            Android:id="@+id/reset_pass2"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentRight="true"
            Android:layout_below="@+id/reset_pass1"
            Android:ems="10"
            Android:hint="@string/reset_confirm_pass"
            Android:inputType="textPassword"
            Android:layout_marginTop="16dp" />
        <TextView
            Android:id="@+id/reset_forgot_password"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentLeft="true"
            Android:layout_alignParentRight="true"
            Android:layout_below="@+id/reset_pass2"
            Android:layout_marginTop="16dp"
            Android:textColor="@color/Link"
            Android:textStyle="bold"
            Android:text="@string/Login_forgot_password" />
        <Button
            Android:id="@+id/reset_reset_password_button"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_below="@+id/reset_forgot_password"
            Android:layout_centerHorizontal="true"
            Android:layout_marginTop="16dp"
            Android:layout_marginBottom="32dp"
            Android:text="@string/reset_change_pass" />
    </RelativeLayout>
</ScrollView>
28
Doge

これは本当に奇妙なことですが、RelativeLayout内のAndroid:layout_margin="32dp"が原因のようです。私がそれを取り出すと、スクロールは正しく機能しました。

もちろん、このため、フォーム要素にさらに多くのマージンを追加する必要がありましたが、少なくともこれは修正されました。

40
Doge

同じ問題が発生し、RelativeLayoutのマージンの代わりにScrollViewのパディングを使用して修正しました。

したがって、RelativeLayout(ScrollViewの子)からAndroid:layout_margin="32dp"を削除し、ScrollViewにAndroid:padding="32dp"を追加します。

13
Ionut Negru

Lollipop以上でステータスバーを透明にすることは、私にとって問題を引き起こしていました。設定

Android:fitsSystemWindows = "true"
0

次のように、誤ったビューを挿入して下マージンを模倣することもできます。

<View
            Android:layout_width="match_parent"
            Android:layout_height="20dp"
            Android:layout_below="@id/recompensaLabel"
            Android:layout_marginTop="0dp"
            Android:id="@+id/simulate_bottom_margin_view"

            />

効果は同じです。相対レイアウトの最後の要素の下に挿入するだけです。

アプリでこの問題が発生したところ、コンテンツをラップするようにScrollViewlayout_heightが設定されていることが原因であることがわかりました。問題は、ScrollViewを必要とするのに十分なコンテンツがある場合、ScrollViewの下部が画面から任意の量だけ離れているため、コンテンツをラップしたくないということです。キーボードがポップアップするまでScrollViewが必要なかったため、これの影響を受けるのに十分なデータがありませんでした。見た目では、OPは同じ状況でした。

これで、キーボードがポップアップすると、ScrollViewの下部がキーボードの高さと同じ量だけ上昇し、表示されている画面の下部よりも下にあるのと同じ任意の量だけキーボードの上部より下になります。

最終的に、私の修正は、ScrollViewの上部をツールバーにバインドしてから、ツリーでScrollVIewを右クリックし、[垂直方向に中央揃え]を選択することでした(親オプションではありません)。今では魅力のように機能します。 layout_heightは自動的に0dpになります。

0
Aaron Bowman