2016-07-25 12 views
8

Umieszczam widok karty wewnątrz scrollview, spodziewamy się, że na dole powinna być wyświetlana ramka (patrz rysunek poniżej). Ale nie jest. Problem polega na tym, że nie mogę przewinąć do dołu, aby zobaczyć granicę widoku karty.Dolna granica CardView jest obcięta wewnątrz ScrollView android

Wszystkie rozwiązania na SO polegają na zmianie layout_margins na paddings, ale nie jest tak w przypadku cardview, jeśli chcemy pokazać granicę. W zasadzie próbowałem wszystkiego. Ale nadal nie działa. scroll to bottom cannot see the border

Rysunek 1. przewijania do dołu nie widać granicy

we can see the top border

Rysunek 2. Widzimy górna granica

Poniższy kod XML

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:custom="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
> 
    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fillViewport="true"> 

      <android.support.v7.widget.CardView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_margin="8dp"> 
        <LinearLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:orientation="vertical" 
         > 
        ... 
        </LinearLayout> 
      </CardView> 
    </LinearLayout> 

referencje : ScrollView doesn't scroll to the bottom

ScrollView cuts off the top and leaves space at the bottom

I can't show LinearLayout at bottom to scroll view

Android ScrollView refuses to scroll to bottom

+1

Czy można dołączyć zrzut ekranu, aby pomóc nam lepiej zrozumieć, co się dzieje? – Vucko

+0

Dodano zrzut ekranu Vucko, dzięki – Cheng

Odpowiedz

4

Jedno rozwiązanie Właśnie znalazłem to owinąć CardView z LinearLayout lub RelativeLayout i ustawić jej dopełnienie. Na przykład, jeśli chcesz uzyskać efekt cienia w cardView, powiedzmy 8dp, możesz ustawić dopełnienie 4dp dla LinearLayout lub RelativeLayout i 4dp layout_margin dla CardView.

+0

tak, ale dodanie dodatkowej warstwy zabierze dodatkowy czas na przechodzenie przez drzewo widoku, które nie jest zoptymalizowane. Cóż, jeśli nie dbasz o wydajność, to powinno zadziałać – Cheng

+0

Nie musiałem nawet ustawiać dopełnienia. Właśnie dodałem układ liniowy i rozwiązałem problem –

9

wpadłem na ten sam problem i musiał wykonać następujące czynności (klucz jest owinięcie LinearLayout wokół cardview gdzie dodałem paddingBottom):

<ScrollView 
    android:id="@+id/item_scrollview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="none" 
    tools:visibility="visible"> 

    <LinearLayout 
     android:id="@+id/item_wrapper_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/content_margin" 
     android:paddingBottom="32dp" 
     android:orientation="vertical"> 

     <android.support.v7.widget.CardView 
      android:id="@+id/item_cardview" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      card_view:cardBackgroundColor="@color/colorPrimary" 
      card_view:cardCornerRadius="4dp" 
      card_view:cardUseCompatPadding="true"> 

dodając otoki LinearLayout okolice Cardview jest tym, co sprawdziło się u mnie.

Zauważ, że musiałem dodać card_view: cardUseCompatPadding = "true" na cardview, aby uzyskać prawidłowy wygląd cieni.

Oto wynik końcowy, w którym czerwone pole pokazuje, gdzie dopełnienie zostało dodane, gdy widok z karty jest rozwinięty i przewinięty w górę.

screenshot

+0

Nie jestem wielkim fanem dodawania dodatkowej warstwy do zawijania widoku karty, zajmie to więcej czasu, aby przejść przez drzewo widoku, zwłaszcza gdy widok jest głęboki. Jeśli nie zależy Ci na wydajności, to powinno zadziałać. – Cheng

+0

Dodanie LinearLayout jako opakowania nie spowoduje dużego zwiększenia wydajności tego projektu. Jeśli wszystko to było zawarte w RecyclerView, wtedy mogłem zobaczyć, że może to być problem. Widok taki jak ten nie powinien być aż tak głęboki - szczególnie nad kartą. –

+0

Istnieje najwyraźniej problem z marginesem lub paddingiem, jeśli zobaczysz zrzut ekranu powyżej. Pasek przewijania nie będzie już przewijany, nawet jeśli osiągnie dno. Naprawianie tego problemu z wypełnieniem/marginesem jest właściwym sposobem. Zawijanie linelayoutu po prostu w sposób hackowy, czyli IMHO, działa przez przypadek. – Cheng

Powiązane problemy