En essayant de comprendre les marges de LinearLayout à l'intérieur d'un ScrollView
J'ai besoin d'avoir un LinearLayout
à l'intérieur d'un SrollView
et que LinearLayout
doivent disposer d'une marge de l' ScrollView
. Au début, la seule façon que je pouvais penser pour résoudre ce problème était d'avoir une LinearLayout
l'intérieur d'un autre LinearLayout
avec les marges définies sur cette dernière disposition. Ils ne fonctionnent pas si ils ont été mis à l'extérieur LinearLayout.
Exemple:
<?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>
Ma question est: Pourquoi dois-je faire?
Si j'avais un seul LinearLayout
il n'y aurait pas de marge...
Exemple:
<?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>
Puis, à la recherche de quelques problème similaire, j'ai trouvé quelques mises en page qui m'a donné l'idée de l'utilisation de rembourrage dans la ScrollView
au lieu de la marge dans le LinearLayout
. Aussi, cela résout mon problème et je n'ai pas besoin d'un LinearLayout
à l'intérieur d'un autre. C'est une solution plus élégante.
Encore, j'aimerais comprendre pourquoi le simple marge à l'intérieur de la LinearLayout
ne fonctionne pas à l'intérieur d'un ScrollView
. Parce qu'il fonctionne très bien si elle n'est pas à l'intérieur d'un ScrollView
.
Quelqu'un sait pourquoi?
Vous devez vous connecter pour publier un commentaire.
J'ai creusé un peu dans le code source:
ScrollView
s'étendFrameLayout
. Celui-ci dispose d'une certaine marge de questions lui-même etScrollView
n'est même pas essayer de le résoudre. Les marges sont fondamentalement ignoré lors de l'measuaring.Mais à la fin il n'a pas d'importance puisque vous devriez être en mesure de définir un rembourrage sur la
ScrollView
lui-même (c'est une affirmation, n'essayez pas que). Il devrait y avoir aucun besoin de marge pour un seul enfant de la vue.LinearLayout
hauteur définie àwrap_content
et tous les enfants de la hauteur définie àmatch_parent
, les enfants vont en fait êtrefill_parent
, qui est la valeur qui vient de laScrollView
. Et paswrap_content
qui est la valeur de laLinearLayout
, leur parent direct. Ce problème ne se produit pas si j'utilise unLinearLayout
à l'intérieur de l'autre. Donc je suppose qu'il y a plusScrollView
que nous savons!?android:fillViewport="true"
.LinearLayout
àwrap_content
?android:fillViewport="false"
sera pas de la force de laLinearLayout
êtrefill_parent
, c'est tout. Donc il ne devrait pas être étendu et donc les enfants ne serait pas non plus.GridView
à l'intérieur d'unLinearLayout
qui est à l'intérieur d'unScrollView
. Et après la recherche et la lecture beaucoup, je viens d'apprendre que je ne suis pas censé avoir unGridView
à l'intérieur d'unScrollView
. Je n'ai aucune idée de comment faire mon INTERFACE maintenant... 🙁ListView
dans unScrollView
. 1. Ils ne peuvent pas toujours êtrewrap_content
en hauteur. 2. Ils sont déjà à défilement, il n'a pas de sens de les placer dans unScrollView
qui est aussi défilement vertical.Bonjour Knickedi et Ricardo Amaral,
Même si cette réponse est marqué comme résolu, mais j'ai envie de mettre quelques lumières sur la question.
Comme Knickedi dit, le ScrollView s'étend FrameLayout.
Donc, Ma réponse est que Vous pouvez définir le
layout_gravity
de LinearLayout dans le scrollView et puislayout_margin
travaillera en LinearLayout de cas avec linearLayout dans FrameLayout.J'ai eu le même problème, et j'ai appliqué cette et il a travaillé pour moi. 🙂
Exemple :