2012-07-26 30 views
26

私は、相対レイアウト内にrelativelayoutを持つルートスクロールビュー要素と相対レイアウト内にフォーム要素を束ねています。Android ScrollViewは、下にスクロールすることを拒否します

何らかの理由で、ソフトキーボードが上がっていると、下にスクロールできなくなってしまい、自分のボタンを半分にカットしてしまいます。

ここでは、階層ビューアのスクリーンショットを示し、私の意図を示しています。

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> 
+0

これは 'LinearLayout'でも発生します。このスレッドを提供していただきありがとうございます! – avalancha

答えて

39

これは本当に奇妙ですが、RelativeLayout内android:layout_margin="32dp"によって引き起こされているように見えます。私が一度それを取り出したスクロールは正常に動作しました。

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

+3

これは本当です。 ScrollView内のレイアウトに余白がある場合、一番下までスクロールすることはできません。私の場合は、スクロールビューとボタンを含むLinearLayoutを持っていたので、ルートレイアウトにマージンを置くことができました。 – slott

+0

あなたの自動応答をありがとう、それは多くの時間から私を救った! – Apollo

+0

スクロールビューでのパディングは、すべての要素のマージンを必要としませんか? – Gulfaran

13

私は同じ問題を抱えていましたが、RelativeLayoutの余白の代わりにScrollViewのパディングを使用して修正しました。

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

+0

これは、子要素のマージンを分割するよりも、より適切な解決策でした。マージンは適切な場所に配置するだけです。それが囲むレイアウト要素ではなく、ScrollView自体です。 –

+0

は、この投稿のコメントや日付に気づかずにこれを言っただけです。xD – Gulfaran

+0

これが他の人に役立つ場合は、 'ScrollView'にパディングを置くとこのバグに遭遇しました。私のために働いたのは、 'ScrollView'の子にパディングを置くことだけでした。 –

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" 

      /> 

効果は同じである、あなただけの相対的なレイアウトの最後の要素の下に挿入する必要があります。

0

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

キーボードがポップアップすると、ScrollViewの下部がキーボードの高さと同じ量だけ持ち上げられ、キーボードの上部の下に、キーボードの下端よりも低い任意の量だけ上になります表示画面。

最終的には、ScrollViewの上部をツールバーにバインドし、ツリー内のScrollVIewを右クリックして、「垂直方向に」(親オプションではない)を選択することでした。今は魅力のように働く。 layout_heightは自動的に0dpになります。

0

ロリポップ以上でステータスバーを透明にすると、問題が発生していました。 scrollViewを含むレイアウトの親ビューに

android:fitsSystemWindows="true"
を設定すると、問題が解決しました。

関連する問題