2012-07-26 40 views
26

Tôi có phần tử scrollview gốc với relativelayout trong đó và một loạt các phần tử biểu mẫu bên trong bố cục tương đối.Android ScrollView từ chối di chuyển xuống dưới cùng

Vì lý do nào đó, khi bàn phím mềm lên, có vẻ như không thể cuộn hết cỡ xuống dưới, điều này làm giảm một nửa các nút của tôi.

Đây là ảnh chụp màn hình của trình xem phân cấp để minh họa ý tôi.

enter image description here

Như bạn có thể thấy, hệ thống biết rằng quan điểm tiếp tục qua bàn phím, nhưng các scrollview (mà lấp đầy phần nhìn thấy được của màn hình một cách chính xác) sẽ không tiếp tục di chuyển xuống như mong muốn.

Tôi có android:windowSoftInputMode="adjustResize" trong tệp kê khai cho hoạt động và tôi có thể/sẽ không chuyển sang chế độ xoay.

Mọi trợ giúp đều được đánh giá cao.

chỉnh sửa: Tôi thấy điều này trong hơn 1 chế độ xem. Đây là xml của người khác nhìn với cùng một vấn đề:

<?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

Điều này cũng xảy ra với 'LinearLayout'. Cảm ơn bạn đã cung cấp chủ đề này! – avalancha

Trả lời

39

này thực sự là kỳ lạ, nhưng nó dường như được gây ra bởi android:layout_margin="32dp" trong RelativeLayout. Khi tôi lấy nó ra thì cuộn đã hoạt động bình thường.

Tất nhiên, vì điều này, tôi phải thêm nhiều lề hơn vào các phần tử biểu mẫu của mình, nhưng ít nhất điều này hiện đã được sửa.

+3

Điều này đúng. Nếu bố trí của bạn bên trong ScrollView có lề, bạn sẽ không thể cuộn tất cả các cách để phía dưới. Đối với trường hợp của tôi, tôi chỉ có thể đặt lề trong bố trí gốc như tôi đã có một LinearLayout có chứa một scrollview và một nút. – slott

+0

Cảm ơn bạn đã trả lời tự động, nó đã lưu tôi từ rất nhiều thời gian! – Apollo

+0

padding trên scrollview sẽ ngăn chặn sự cần thiết phải margin mỗi phần tử? – Gulfaran

13

Tôi đã gặp vấn đề tương tự và tôi đã khắc phục sự cố bằng cách sử dụng đệm trong ScrollView thay vì lề trong RelativeLayout.

Vì vậy, hãy xóa android:layout_margin="32dp" khỏi RelativeLayout (con của ScrollView) và thêm android:padding="32dp" vào ScrollView.

+0

Đây là giải pháp thích hợp hơn là đi và phân chia lợi nhuận trong các phần tử con. Lề chỉ cần được đặt ở vị trí thích hợp; bản thân ScrollView thay vì phần tử bố trí nó bao quanh. –

+0

chỉ nói điều này mà không nhận thấy nhận xét hoặc ngày của bài đăng này xD – Gulfaran

+0

Trong trường hợp điều này giúp người khác, tôi cũng gặp phải lỗi này khi tôi đặt đệm trên 'ScrollView'. Điều duy nhất làm việc cho tôi là đặt đệm vào con của 'ScrollView'. –

0

Bạn cũng có thể chèn một cái nhìn sai để bắt chước các lề dưới như thế này:

<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" 

      /> 

Hiệu quả là như nhau, bạn chỉ cần chèn nó bên dưới yếu tố cuối cùng trong Layout tương đối của bạn.

0

Tôi vừa gặp sự cố này với một ứng dụng và phát hiện ra rằng đó là do bố cục ScrollView layout_height được thiết lập để bao bọc nội dung. Vấn đề là nếu bạn có đủ nội dung cần một ScrollView, bạn không muốn quấn nội dung vì phần dưới của ScrollView bị tắt màn hình bởi một số lượng tùy ý. Tôi không có đủ dữ liệu bị ảnh hưởng bởi điều này vì tôi không cần ScrollView cho đến khi bàn phím bật lên. Bởi vẻ ngoài của nó, OP trong tình huống tương tự.

Bây giờ, khi bàn phím bật lên, phần dưới cùng của ScrollView được tăng cùng một lượng với chiều cao của bàn phím và kết thúc dưới đầu bàn phím với cùng một số lượng tùy ý ở dưới đáy của bàn phím màn hình hiển thị.

Cuối cùng, bản sửa lỗi của tôi là gắn đầu của ScrollView vào thanh công cụ của tôi và sau đó nhấp chuột phải vào ScrollVIew trong cây và chọn 'center verticalically' (không phải tùy chọn cha). Bây giờ làm việc như một say mê. Layout_height sẽ tự động chuyển đến 0dp.

0

Làm thanh trạng thái trong suốt trong kẹo và ở trên đã tạo ra sự cố cho tôi. Đặt

android:fitsSystemWindows="true"
thành chế độ xem bố cục gốc có chứa scrollView đã giải quyết được sự cố.

Các vấn đề liên quan