Попытка понять поля в 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
.
Кто-нибудь знает, почему?
Ответы
Ответ 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>