Я хотел бы скруглить углы представления, а также изменить цвет представления в зависимости от содержимого во время выполнения.
TextView v = new TextView(context);
v.setText(tagsList.get(i));
if(i%2 == 0){
v.setBackgroundColor(Color.RED);
}else{
v.setBackgroundColor(Color.BLUE);
}
v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
v.setPadding(twoDP, twoDP, twoDP, twoDP);
v.setBackgroundResource(R.drawable.tags_rounded_corners);
Я надеялся установить возможность рисования и цвета перекрываться, но это не так. То, что я выполню вторым, будет фоном.
Есть ли способ программно создать это представление, имея в виду, что цвет фона не будет определен до времени выполнения?
edit: я только меняю местами между красным и синим для тестирования. Позже цвет будет выбираться пользователем.
редактировать:
tags_rounded_corners.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners
android:bottomRightRadius="2dp"
android:bottomLeftRadius="2dp"
android:topLeftRadius="2dp"
android:topRightRadius="2dp"/>
</shape>
android
android-layout
background
android-view
rounded-corners
Джон Моффитт
источник
источник
tags_rounded_corners
?Ответы:
Вместо этого
setBackgroundColor
извлеките фон, который можно рисовать, и установите его цвет:Кроме того, вы можете определить отступы в своем
tags_rounded_corners.xml
:источник
Тотальный программный подход к закругленным углам и добавлению случайного цвета фона к представлению. Я не тестировал код, но вы поняли.
Здесь мы используем градиент, который можно рисовать, чтобы мы могли его использовать,
GradientDrawable#setCornerRadius
потому чтоShapeDrawable
НЕ предоставляет никаких таких методов.источник
PaintDrawable
вместоGradientDrawable
. Он поддерживает закругленные углы и только один цвет, который кажется более подходящим, чем градиент.var pd = new PaintDrawable(BackgroundColor); pd.SetCornerRadius(15); myView.Background = pd;
Я думаю, что самый быстрый способ сделать это:
источник
Вы можете лучше добиться этого, используя DrawableCompat следующим образом:
источник
Если у вас нет инсульта, вы можете использовать
но это также изменит цвет обводки
источник
Вот пример использования расширения. Это предполагает, что вид имеет одинаковую ширину и высоту.
Чтобы получить размер представления, необходимо использовать прослушиватель изменения макета. Тогда вы можете просто назвать это в таком виде
myView.setRoundedBackground(Color.WHITE)
источник
Вы можете динамически изменять цвет любых элементов (макет, текст). Попробуйте ниже код, чтобы программно установить цвет в макете
в файле activity.java
создать layout_round.xml в папке с возможностью переноса
макет в файле activity.xml
источник
Копирование комментария @ cimlman в ответ верхнего уровня для большей наглядности:
FYI:
ShapeDrawable
(и его подтипPaintDrawable
) использует внутреннюю ширину и высоту по умолчанию, равные 0. Если объект для рисования не отображается в вашем сценарии использования, возможно, вам придется установить размеры вручную:-1
- это магическая константа, которая указывает, что Drawable не имеет собственной ширины и высоты ( Источник ).источник