Я добавил полную рамку вокруг представления, но мне нужно добавить только угол, как показано ниже:
Я имею в виду только красный угол.
Я попытался настроить нижний границу xml, но это не сработало:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="10dp" android:height="10dp" android:color="#B22222" />
<solid android:color="#FCE6C9" />
<corners android:radius="20dp" />
</shape>
Любая помощь будет оценена
Я не думаю, что это можно сделать с помощью ShapeDrawable
, так как это потребует от вас использовать какой-либо запас или дополнение для самого drawable. На самом деле есть атрибут padding
, но, к сожалению, это влияет только на содержимое View
, а не на само по себе.
Это означает, что простым решением было бы создать 9-патч вместо этого и применить его в качестве фона для TextView
. Просто для демонстрационных целей: сделайте 9-патч похожим следующим образом:
Edit: Во-вторых, есть еще один вариант, который полагается на использование LayerDrawable
для создания желаемого эффекта. Это немного утомительно, и я сомневаюсь, что это будет более эффективно, чем использование 9-патча, но по крайней мере вам не нужно отображать изображения, а это значит, что если вам нужно сделать, например, изменение цветов, это более прямолинейно.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/rounded" />
<item android:drawable="@android:color/white" android:left="30dp"
android:right="30dp" />
<item android:bottom="30dp" android:drawable="@android:color/white"
android:top="30dp" />
<item android:bottom="30dp" android:left="10dp" android:right="10dp"
android:drawable="@color/pink" android:top="30dp" />
<item android:bottom="10dp" android:left="30dp" android:right="30dp"
android:drawable="@color/pink" android:top="10dp" />
</layer-list>
Некоторые детали: @drawable/rounded
- это фрагмент кода, который вы разместили сами. Следующие два элемента - это просто белые прямоугольники со смещением, чтобы создать белые края. Теперь, поскольку они также будут перекрывать розовую поверхность, нам нужно еще два розовых прямоугольника (опять же с конкретными смещениями), чтобы противостоять этому. Результат - это фон, который выглядит точно так же, как то, что вы показываете в своем вопросе.
Обратите внимание, что вы можете захотеть, можете ли вы немного оптимизировать это. По крайней мере, я бы рекомендовал не dimens.xml
смещения (как, например, я сделал для простоты), но хранить их в файле dimens.xml
чтобы вы могли сохранять эти значения централизованными и согласованными, ссылаясь на них как с ShapeDrawable
и с LayerDrawable
.
Добавление. На устройствах с предварительной ICS (или, возможно, с предварительной сотой) возникает проблема с прямой ссылкой на цвета с атрибутом android:drawable
. Тем не менее, вы можете легко обойти это, установив еще один вариант (будь то 9-патч или ShapeDrawable
) для представления этого цвета. Например, в приведенном выше фрагменте вы замените android:drawable="@color/pink"
на android:drawable="@drawable/color_pink"
, где color_pink
может просто быть xml файлом, содержащим:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FCE6C9" />
</shape>
Очевидно, вам нужно будет сделать то же самое для всех других цветов, на которые ссылается LayerDrawable
. Протестировано на прянике 2.3.7.
Я бы создал файл с 9 патчами и установил его в качестве фона основного контейнера. Шаги для этого будут.
Это должно быть так. Надеюсь, это поможет.