Как получить "дно" гравитации, работающую над возможностью рисования в xml
У меня есть простая цель. Я хочу светло-серый фон на моем FrameLayout с черной разделительной линией под ним (только под землей, а не вокруг). Пока у меня есть это:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle" android:gravity="center">
<solid android:color="#EEEEEE" />
</shape>
</item>
<item>
<shape android:shape="line" android:gravity="bottom" >
<stroke android:width="1dip" android:color="#010101"/>
</shape>
</item>
</layer-list>
Но он рисует линию через центр, т.е. игнорирует бит тяжести = "нижний". Как я могу это исправить?
EDIT: Этот вопрос очень старый. Выбранный ответ может быть или не соответствовать текущим API-интерфейсам и т.д. Вам предлагается начать свой собственный вопрос, а не добавлять к нему, который больше не отслеживается.
Ответы
Ответ 1
Я бы рекомендовал использовать изображение с девятью патчами для этого - вот пример, который должен выполнить задание:
![Example nine-patch image]()
(Это только крошечный, но он есть!)
Если вы разместите это в своей папке и установите для него свой фон FrameLayout, вы должны получить желаемый результат. Содержимое будет отображаться в серой области, а пиксель # 010101 будет растянут горизонтально, чтобы сформировать линию внизу. Просто следите за тем, чтобы расширение .9.png обеспечивало загрузку его как девяти патчей.
Надеюсь, что поможет вам
Ответ 2
Я тоже много боролся с этим. В принципе, чтобы создать границу внизу, вы должны думать в противоположном направлении от того, что вы ожидаете. Вы начинаете с прямоугольника с цветом границы. Кроме того, вы рисуете фактический цвет со смещением снизу.
Я использую это:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- CREATE A RECTANGLE WITH YOUR BORDER COLOR -->
<item>
<shape android:shape="rectangle" >
<solid android:color="#fff"/>
</shape>
</item>
<!-- NOW DEFINE THE NORMAL COLOR-->
<item android:bottom="BOTTOM_BORDER_THICKNESS E.G. 4dp">
<shape android:shape="rectangle" >
<solid android:color="#ccc"/>
</shape>
</item>
</layer-list>
Или, как Хуан Пабло Сарачено предложил:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<color android:color="YOUR_BORDER_COLOR" />
</item>
<item android:top="YOUR_BORDER_THICKNESS">
<color android:color="YOUR_BG_COLOR" />
</item>
</layer-list>
Ответ 3
К сожалению, я не нашел способ заставить гравитацию работать с чертежами, но я нашел, как вы можете добиться того, чего хотите с чистым xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:top="-2dp"
android:left="-2dp"
android:right="0dp"
android:bottom="1dp"
>
<shape android:shape="rectangle">
<solid android:color="#EEEEEE"/>
<stroke android:width="1dp" android:color="#010101"/>
</shape>
</item>
</layer-list>
Удачи:)
Ответ 4
Это работает!
<item>
<bitmap
android:gravity="left|bottom"
android:src="@drawable/myDrawable" />
</item>
Ответ 5
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="@color/Black" />
</shape>
</item>
<item android:bottom="5dp">
<shape android:shape="rectangle" >
<solid android:color="@color/White" />
</shape>
</item>
</layer-list>
Ответ 6
Ну, это довольно старый вопрос, но ни один из ответов, похоже, не отвечает на реальный вопрос (как сделать gravity
рабочий), так что здесь рабочий пример:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="#2196F3"/> <!-- Background color -->
</item>
<item android:gravity="bottom">
<shape>
<size android:height="10dp" /> <!-- I would suggest 1dp -->
<solid android:color="#F50057" /> <!-- Line color -->
</shape>
</item>
</layer-list>
По аналогии, если вы хотите использовать гравитацию left
или right
изменить атрибут height
на width