Мне нужно иметь 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>
Мой вопрос: Зачем мне это нужно?
Если бы у меня был только один 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>
Затем, ища подобную проблему, я нашел несколько макетов, которые натолкнули меня на идею использования отступов в ScrollView
вместо полей в LinearLayout
. Это также решает мою проблему, и мне не нужен LinearLayout
внутри другого. Это более элегантное решение.
Тем не менее, я хотел бы понять, почему простое поле внутри LinearLayout
не работает, когда оно внутри ScrollView
. Потому что он отлично работает, если он не находится внутри ScrollView
.
Кто-нибудь знает, почему?
Я немного покопался в исходном коде:
ScrollView
extends FrameLayout
. У этого вопроса есть некоторые проблемы с запасами, и ScrollView
даже не пытается его решить. При измерении поля в основном игнорируются.
Но, в конце концов, это не имеет значения, так как вы должны быть в состоянии определить отступ для самого ScrollView
(это утверждение, не пытались это сделать). Не должно быть необходимости в полях для одного дочернего представления.
Привет Кникеди и Рикардо Амарал,
Хотя этот ответ помечен как решенный, но я хочу осветить этот вопрос.
Как сказал 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>