1

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

2 Answers 2

2

Try the below code-

GradientDrawable bgShape = (GradientDrawable)yourview.getBackground(); bgShape.setColor(Color.MAGENTA); 
Sign up to request clarification or add additional context in comments.

Comments

0

You'll have to create separate drawables for each colour, as there is no way to set those attributes in runtime - because the application would have to compile them.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.