Мой скроллвид вообще не работает

Я не могу сделать ScrollView правильно прокручивать. Он всегда обрезает содержимое внизу, как если бы оно было нормальным LinearLayout,

Мой код:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:fillViewport="true"
tools:context="com.android.dadiperpus.MainActivity">

я кладу LinearLayout внутри ScrollView

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/logo_stan"
    android:orientation="vertical"
    android:weightSum="10">

Затем я помещаю RelativeLayout в LinearLayout

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal|center_vertical"
            android:text="CONTOH BRO"
            android:textSize="32sp" />
    </RelativeLayout>

Здесь я использую Gridlayout

    <GridLayout
        android:id="@+id/mainGrid"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="8"
        android:alignmentMode="alignMargins"
        android:columnCount="2"
        android:columnOrderPreserved="false"
        android:padding="14dp"
        android:rowCount="3">

Затем я положил пару этого кода внутри GridLayout

        <android.support.v7.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_marginBottom="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_rowWeight="1"
            app:cardCornerRadius="8dp"
            app:cardElevation="8dp">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_margin="16dp"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/logo_stan" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Pengantar Kepabeanan"
                    android:textAlignment="center"
                    android:textColor="@android:color/black"
                    android:textSize="18sp"
                    android:textStyle="bold" />
            </LinearLayout>
        </android.support.v7.widget.CardView>

Я уже пыталась завернуть ScrollView внутри LinearLayout и это ничего не изменило.

2 ответа

Я положил LinearLayout внутри ScrollView

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/logo_stan"
    android:orientation="vertical"
    android:weightSum="10">

Это линейное расположение необходимо использовать wrap_content для его высоты. Используя match_parent, вы говорите, что хотите, чтобы linearlayout был таким же высоким, как и скроллвью, в котором он размещен... что означает, что он отключит весь "прокручиваемый" контент. Используя wrap_content (или некоторую фиксированную высоту, превышающую размер прокрутки), у вас будет больше контента в линейном макете, чем видно на одном экране, и тогда прокрутка будет работать, как и ожидалось.

При удалении веса из линейной разметки, layout_weight из относительной разметки и разметки сетки, ваше представление прокрутки будет прокручиваться (только в том случае, если содержимое превышает размер экрана). Укажите высоту для всех этих макетов (относительный макет и сетка) wrap_content вместо 0dp. На самом деле то, что происходит в вашем коде: вы задали высоту match_parent линейного макета (равную размеру экрана) и весовой коэффициент 10. А затем вы задаете относительный макет layout_weight = 2 и макет сетки layout_weight = 8, что означает, что относительное расположение занимает 2 части экрана. и сетка занимает 8 частей экрана. В этом случае ваш контент никогда не будет расти больше, чем размер осыпи, а компоновка сетки пытается вписаться в экран, из-за чего ваш контент обрезается внизу.

Надеюсь, это поможет вам.

Спасибо

Другие вопросы по тегам