Подтвердить что ты не робот

Попытка понять поля в LinearLayout внутри ScrollView

Мне нужно иметь LinearLayout внутри a SrollView и что LinearLayout должен иметь разницу с ScrollView. Сначала единственный способ решить эту проблему - иметь LinearLayout внутри другого LinearLayout с полями, установленными на этом последнем макете. Они не будут работать, если они будут установлены во внешнем LinearLayout.

Пример:

<?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="fill_parent"
    android:orientation="vertical"
    android:fillViewport="true"
    android:background="@color/layout_color_green">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@color/layout_color_yellow">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="10dp"
            android:orientation="vertical"
            android:background="@color/layout_color_blue">
        </LinearLayout>
    </LinearLayout>
</ScrollView>

enter image description here

Мой вопрос: Зачем мне это нужно?

Если бы у меня был только один LinearLayout, то не было полей...

Пример:

<?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="fill_parent"
    android:orientation="vertical"
    android:fillViewport="true"
    android:background="@color/layout_color_green">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:orientation="vertical"
        android:background="@color/layout_color_blue">
    </LinearLayout>
</ScrollView>

enter image description here

Затем, ища какую-то аналогичную проблему, я нашел несколько макетов, которые дали мне идею использования дополнения в ScrollView вместо поля в LinearLayout. Это также решает мою проблему, и мне не нужен LinearLayout внутри другого. Это более элегантное решение.

Тем не менее, я хотел бы понять, почему простой пробел внутри LinearLayout не работает, когда внутри ScrollView. Потому что он работает нормально, если он не находится внутри ScrollView.

Кто-нибудь знает, почему?

4b9b3361

Ответ 1

Я немного искал исходный код:

ScrollView extends FrameLayout. У этого есть некоторые проблемы с запасом, и ScrollView даже не пытается его решить. Поля в основном игнорируются при измерении.

Но в конце концов это не имеет значения, так как вы должны иметь возможность определять дополнение на самом ScrollView (это утверждение, не пыталось это сделать). Для просмотра одного ребенка не должно быть необходимости.

Ответ 2

Привет, Найкеди и Рикардо Амарал,

Хотя этот ответ отмечен как решенный, но я хочу поставить некоторые проблески в этом вопросе.

Как сказал Knickedi, ScrollView расширяет FrameLayout.

Итак, я отвечаю, что вы можете установить layout_gravity LinearLayout в scrollView, а затем layout_margin будет работать в LinearLayout в случае с linearLayout в FrameLayout.

У меня была такая же проблема, и я применил это, и это сработало для меня.:)

Пример:

<ScrollView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="top"
                    android:layout_marginTop="30dp"
                    android:orientation="vertical" >
</ScrollView>