#java #android #xml #drawable #layer-list
#java #Android #xml #можно нарисовать #layer-list
Вопрос:
В объяснении списка слоев официального сайта есть пример, который я не могу понять.
Пример:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap
android:gravity="center"
android:src="@drawable/android_red" />
</item>
<item
android:left="10dp"
android:top="10dp">
<bitmap
android:gravity="center"
android:src="@drawable/android_green" />
</item>
<item
android:left="20dp"
android:top="20dp">
<bitmap
android:gravity="center"
android:src="@drawable/android_blue" />
</item>
</layer-list>
Вывод:
Я не могу понять две вещи:
- Почему красный android не находится в центре. Он единственный, у кого нет верхнего или левого смещения. Может быть, я не понимаю значения смещения сверху и слева, с какой точки вычисляется смещение?
- Относится ли android: gravity=»center» ко всем контейнерам или к элементу выше («его родной брат»), т. Е. Относится ли второй элемент к контейнеру или к первому элементу?
Ответ №1:
я думаю, что если вы скопируете этот код и попытаетесь изучить его, вы сможете понять идею. на самом деле красный android находится в центре, но на этом рисунке это неясно, поэтому, если вы поместите его в ImageView, он будет выглядеть так
я дал фоновому желтому цвету четкость, чтобы вы могли видеть, что красный android находится в центре.
2- android: gravity=»center» для элемента, который его содержит, обратите внимание, что элемент будет растягиваться до родительской ширины и высоты, чтобы вы могли заметить, например, что синий андроид находится в центре своего элемента, его левый верхний угол (10,10) и его нижний правый угол это то же самое, что и родительский
Комментарии:
1. Совпадает ли позиция каждого элемента (без android: top =»20dp» android: left =»20d) ?.. Кто является родителем элементов?
2. родительским элементом элементов является <layer-list> , и да, без android:top=»20dp» android:left=»20d позиция будет такой же, но когда вы поместите ее, родительский элемент (layer-list) будет растягиваться, чтобы содержать все элементы
3. Разве layerlist не соответствует размеру ImageView? Я думал, что layer- list занимает весь размер ImageView
4. да, layer-list имеет размер изображения, потому что размеры ImageView равны wrap_content , я хотел сказать следующее: пространство, которое вы видите вокруг red android, связано с «android: top=»20dp» android: left =»20d»» и «android: top =»10dp»android: left=»10d»» , без них layer-list будет точно размером с red android, но с ними layer-list вынужден быть больше, чтобы содержать всех дочерних элементов, и поэтому red android также будет иметь размер layer-list , и вот работаиз «android: gravity =»center»»
5. я думаю, что важным моментом является гравитация, а не растровое изображение, если вы заметили, что в атрибутах <item> нет атрибута gravity, поэтому они говорят: «используйте элемент <bitmap> внутри элемента <item>, чтобы указать рисуемый объект и определить гравитацию для чего-то, что не масштабируется, например , «центр». » так что это важная вещь , указывающая гравитацию , а не масштаб . я не знаю точно, почему они упомянули bitmap , однако вы можете использовать gravity внутри <item> без использования bitmap и получить тот же результат, я думаю, что этот атрибут был добавлен позже к <item> .