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

Мне нужно иметь LinearLayout внутри 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 .

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

24
задан Ricardo Amaral 24 September 2011 в 14:54
поделиться

2 ответа

Я немного покопался в исходном коде:

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

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

16
ответ дан 29 November 2019 в 00:10
поделиться

Привет Кникеди и Рикардо Амарал,

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

Как сказал 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>
11
ответ дан 29 November 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: