2013-06-15 27 views
14

Tôi có một bố cục đơn giản như sau:scrollview không di chuyển đến bên lề ở phía dưới

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#D23456" > 

    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dp" 
    android:background="#FFFFFF" > 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="800dp" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

</ScrollView> 

Các nền của scrollview là màu hồng và bố trí tuyến tính bên trong có hình ảnh biểu tượng android với chiều cao 800dp (không phù hợp với màn hình). Những gì tôi mong đợi để thấy là tưởng tượng nổi trong một nền màu hồng với một lề 10dp ở mỗi bên (trên, dưới, trái, phải). Nhưng khi tôi cuộn xuống dưới cùng, scrollview không di chuyển đến lề, do đó, dưới cùng của cuộn là số lần xem không phải là lề màu hồng.

Làm cách nào để ngăn chặn điều này? Điều này khiến người dùng nghĩ rằng trang chưa kết thúc và khiến anh muốn cuộn nhiều hơn.

Trả lời

44

Tôi sau đó phát hiện ra rằng, một tình huống tương tự đã được trả lời trong chủ đề sau https://stackoverflow.com/a/16885601/1474471 bởi @olefevre.

Thêm một LinearLayout thêm bao quanh LinearLayout hiện tại với một đệm và loại bỏ bố trí lợi nhuận các LinearLayout bên trong của giải quyết vấn đề:

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

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#D23456" 
    android:padding="10dp" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" > 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="800dp" 
      android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 
</LinearLayout> 

</ScrollView> 
+1

Chỉ cần một FYI, nó không phải là một 'LinearLayout'. Tôi đang sử dụng 'RelativeLayout'. – theblang

+0

đây là giải pháp ... nó hoạt động như một nét duyên dáng ..! @Mehmet Katircioglu – TheFlash

+1

Như @mattblang đã đề cập, để thực hiện tốt hơn nên sử dụng FrameLayout thay vì bố cục tuyến tính và tương đối nặng hơn. – TheIT

0

sử dụng android:fillViewport="true" trên ScrollView có thể làm điều đó.

ví dụ trong this thread.

+0

Tôi biết thuộc tính này, nhưng không hoạt động trong trường hợp này (hãy tự thử). chúng ta có thể thiếu một cái gì đó. –

+2

Không làm việc cho tôi. – theblang

6

Giải pháp đăng bởi @Mehmet Katircioglu hoạt động tốt, nhưng bạn có thể giải quyết vấn vấn đề chỉ cần thay đổi android : layout_margin đến android: padding, mà không cần xem thêm. Như thế này:

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

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#D23456" 
     android:padding="10dp" > 

     <!-- Your content (ImageView, buttons...) --> 
    <LinearLayout/>