12

Tôi gặp sự cố với Phân đoạn bao gồm ScrollView chứa LinearLayout. Tôi đang cố gắng tạo hiệu ứng trong đó LinearLayout có nền màu trắng và trông giống như một mảnh giấy cuộn trên nền màu. Cách mà tôi đang cố gắng để đạt được điều này là bằng cách có ScrollView chiếm không gian đầy đủ của đoạn và sau đó LinearLayout bên trong có android:layout_margin="16dp" để tạo không gian xung quanh "giấy". Bằng cách này, thanh cuộn của ScrollView xuất hiện trong khu vực nền màu, lề ở trên cùng cuộn đi cùng với nội dung và lề ở dưới cùng chỉ cuộn trong khi một đến cuối.ScrollView không cuộn đến cuối lề bên dưới của LinearLayout bên trong

Thật không may trong cấu hình này ScrollView sẽ không cuộn tất cả các cách để kết thúc và trong thực tế cắt giảm một số lượng rất nhỏ của văn bản ở phía dưới. Tôi nghi ngờ rằng ScrollView không tính đến lợi nhuận của con mình trong khoảng cách di chuyển dọc của nó. Để giải quyết điều này, tôi đã bọc LinearLayout trong một FrameLayout để giải quyết vấn đề, nhưng có vẻ không cần thiết. Bất kỳ con trỏ nào về cách loại bỏ thùng chứa không cần thiết này sẽ được đánh giá cao.

Lưu ý: thiết lập android:padding="16dp" trên ScrollView và loại bỏ các lề không có hiệu ứng mong muốn, khi đó phần đệm xuất hiện trên tất cả bốn cạnh liên tục, bất kể vị trí cuộn.

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

    <!-- This FrameLayout exists purely to force the outer ScrollView to respect 
     the margins of the LinearLayout --> 
    <FrameLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:padding="10dp" 
      android:layout_margin="16dp" 
      android:background="@color/page_background" > 

      <TextView 
       android:id="@+id/article_title" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:textIsSelectable="true" /> 

      <TextView 
       android:id="@+id/article_content" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textIsSelectable="true" /> 

     </LinearLayout> 
    </FrameLayout> 
</ScrollView> 
+1

Cài đặt cố gắng 'android: layout_height =" fill_parent "' vào 'ScrollView'? –

+0

@AdilSoomro Có, không có niềm vui. Kích thước của ScrollView không thực sự là một vấn đề - nó lấp đầy không gian sẵn có cho nó một cách thích hợp. Đó là khu vực cuộn mà nó cung cấp - nó không cho phép di chuyển đến cuối nội dung của nó khi con ngay lập tức của nó có một lề.Tôi tin rằng vấn đề là do nó không tính đến lợi nhuận của con mình khi tính toán vùng cuộn. –

Trả lời

0

Tôi muốn thoát khỏi FrameLayout và làm cho LinearLayout con của ScrollView với match_parent được ấn định là chiều cao bố trí. Nếu vẫn không hiệu quả, hãy cân nhắc thay thế lề dưới bằng một tùy ý khác View với chiều cao và nền mong muốn làm mục cuối cùng trong LinearLayout.

+0

Match_parent phải nằm trong scrollView. Và con của scrollView phải có heigh = "wrap_content". –

+0

Ah điểm tốt. Tùy chọn thứ hai có thể là tốt nhất sau đó. – Wenger

+2

Cả hai kết hợp này đều không giải quyết được vấn đề. Thêm một cái nhìn bổ sung về chiều cao lề mong muốn ở cuối LinearLayout hơi thô hơn một chút so với gói nó trong FrameLayout, thành thật mà nói. Tại sao ScrollView hoạt động theo cách này và bỏ qua các lề trên và dưới? –

5

Tôi nhớ gặp sự cố với số ScrollView bằng cách nào đó không làm cho nó kết thúc nội dung của nó khi bố cục nội dung có lề trên cùng. Tôi giải quyết vấn đề với một ít hack, thêm một cái nhìn trống để kết thúc LinearLayout:

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

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="10dp" 
     android:layout_margin="16dp" > 

     <TextView 
      android:id="@+id/article_title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textIsSelectable="true" 
      android:background="@color/page_background" /> 

     <TextView 
      android:id="@+id/article_content" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textIsSelectable="true" 
      android:background="@color/page_background" /> 


     <!-- Add a little space to the end --> 
     <View 
      android:layout_width="fill_parent" 
      android:layout_height="30dp" /> 

    </LinearLayout> 
</ScrollView> 

tôi đã sử dụng một cái nhìn trống rỗng tương tự cũng có trong đầu của LinearLayout để tránh đầu/lề dưới hoàn toàn.

EDIT: Tôi vừa nhận ra rằng bạn cũng muốn kết thúc "giấy" hiển thị khi đến cuối chế độ xem. Trong trường hợp đó, bạn có thể muốn đặt màu nền thành TextView s thay vì chính bố cục đó. Sau đó, đảm bảo không có lề giữa tiêu đề và bài viết (sử dụng phần đệm như tách).

EDIT2: Tôi nên tìm hiểu để kiểm tra khi nào câu hỏi được hỏi ... Vâng, có lẽ điều này vẫn giúp một ai đó. :)

1

Câu hỏi là cũ, nhưng tôi đã gặp sự cố với ScrollView bị ảnh hưởng xấu khi gói FrameLayout. Nó cũng không có vẻ để xem xét các lề của bố trí chứa. Bạn có thể thay thế FrameLayout bằng LinearLayout đơn con khác, nên đo chính xác. Tôi đã xóa FrameLayout hoàn toàn và chỉ cần thêm lề có tổng cộng với đệm trên bố cục bên trong:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:padding="26dp" 
      android:background="@color/page_background" > 
<!--...--> 
Các vấn đề liên quan