So I created this drawable xml file called rounded_rect. I initially set its color to red. However I want to be able to change this color in my layout file.
rounded_rect.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp"> <solid android:color="#ffff1900"/> <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/> <stroke android:width="4dp" android:color="#000000"/> </shape> My layout file contains a custom View called ItemView. One of my custom attributes is background color.
<custonview.android.example.com.customview.ItemView android:layout_width="wrap_content" android:layout_height="wrap_content" custom:imagePath="@drawable/yes" custom:text="Yes" custom:backgroundColor="#000000" android:layout_row="0" android:layout_column="0" android:background="@drawable/rounded_rect_green" android:layout_margin="30dp" /> The goal is to be able to change the color in my drawable file to the color I assigned in my layout file. Here is my ItemView.java file
public class ItemView extends View { //attributes of item view private Drawable drawable; private String text; private int backgroundColor; private int width, height; private Paint paint; public ItemView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.ItemView, 0, 0); try { text = a.getString(R.styleable.ItemView_text); backgroundColor = a.getInteger(R.styleable.ItemView_backgroundColor, 0); drawable = a.getDrawable(R.styleable.ItemView_imagePath); } finally { } paint = new Paint(); width = drawable.getMinimumWidth() / 2; height = drawable.getMinimumHeight() / 2; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(width, height); } @Override protected void onDraw(Canvas canvas) { //positions the image in the middle horizontally and a little above the text below drawable.setBounds(width / 4, height / 4 - 50, width - (width / 4), height - (height / 4) - 50); drawable.draw(canvas); paint.setTextSize(100); paint.setColor(Color.BLACK); canvas.drawText(text, width / 2 - paint.measureText(text, 0, text.length()) / 2, height - 50, paint); } } - Maybe I am over contemplating it. Free free to be creative in your answers. Thank you in advance