Как программно скруглить углы и установить случайные цвета фона
Я хотел бы закруглить углы представления, а также изменить цвет представления на основе содержимого во время выполнения.
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);
Я надеялся, что установка drawable и цвет будут перекрываться, но они этого не делают. Какой бы я ни выполнял второй, это результирующий фон.
есть ли способ программно создать это представление, имея в виду, что цвет фона не будет решен до времени выполнения?
edit: теперь я только меняю местами красный и синий для тестирования. Позже цвет будет выбираться пользователем.
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>
5 ответов:
вместо
setBackgroundColorизвлечь фон drawable и установить его цвет:v.setBackgroundResource(R.drawable.tags_rounded_corners); GradientDrawable drawable = (GradientDrawable) v.getBackground(); if (i % 2 == 0) { drawable.setColor(Color.RED); } else { drawable.setColor(Color.BLUE); }кроме того, вы можете определить отступ в вашей
tags_rounded_corners.xml:<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="4dp" /> <padding android:top="2dp" android:left="2dp" android:bottom="2dp" android:right="2dp" /> </shape>
общий программный подход для установки закругленных углов и добавления случайного цвета фона в представление. Я не тестировал код, но вы поняли идею.
GradientDrawable shape = new GradientDrawable(); shape.setCornerRadius( 8 ); // add some color // You can add your random color generator here // and set color if (i % 2 == 0) { shape.setColor(Color.RED); } else { shape.setColor(Color.BLUE); } // now find your view and add background to it View view = (LinearLayout) findViewById( R.id.my_view ); view.setBackground(shape);здесь мы используем градиент drawable, так что мы можем использовать
GradientDrawable#setCornerRadius, потому чтоShapeDrawableне предоставляет такой метод.
Я думаю, что самый быстрый способ сделать это:
GradientDrawable gradientDrawable = new GradientDrawable( GradientDrawable.Orientation.TOP_BOTTOM, //set a gradient direction new int[] {0xFF757775,0xFF151515}); //set the color of gradient gradientDrawable.setCornerRadius(10f); //set corner radius //Apply background to your view View view = (RelativeLayout) findViewById( R.id.my_view ); if(Build.VERSION.SDK_INT>=16) view.setBackground(gradientDrawable); else view.setBackgroundDrawable(gradientDrawable);
Если у вас нет инсульта, вы можете использовать
colorDrawable = resources.getDrawable(R.drawable.x_sd_circle); colorDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);но это также изменит цвет штриха
вы можете лучше достичь этого с помощью DrawableCompat такой:
Drawable backgroundDrawable = view.getBackground(); DrawableCompat.setTint(backgroundDrawable, newColor);
Comments