0

В качестве примера у меня есть selector xml вроде этого:Как я могу динамически изменять цвет любого VIEW, который уже с помощью селектора XML

view_round_corner_with_border.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
<corners 
     android:bottomRightRadius="7dp" 
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp"/> 
<stroke 
    android:color="@color/black" 
    android:width="1dp"/> 

<solid 
    android:color="@color/primary_color"/> 
</shape> 

В приведенном выше selector Я определил цвет фона как primary_color. Теперь, что я хочу сделать, я должен применить этот селектор, который сделает круглый угол до нескольких EditText и TextViewс разным цветным фоном. Но проблема в том, что если я использую этот селектор, он сделает фон как primary_color, и я хочу другой цвет фона.

Если изменить цвет динамически нравится:

editText.setBackgroundResource(R.color.anyColor); 

то состояние селектор может получить пострадавших и EditText не будет оставаться с круглыми углами краями.

То, что я сделал сейчас, чтобы сделать несколько селектор с различными цвета и использовать их в зависимости от логики для нескольких EditText и TextView.

Так есть любая вещь, с помощью которого я могу использовать единственный селектор, который может быть использован для нескольких EditText и TextView динамически изменять цвет фона, не затрагивая там круглые углы.

ответ

2

Вы можете попробовать что-то вроде этого

Drawable background = textView.getBackground(); 
if (background instanceof ShapeDrawable) { 
    ((ShapeDrawable)background).getPaint(). 
     setColor(getResources().getColor(R.color.anycolor)); 
} else if (background instanceof GradientDrawable) { 
    ((GradientDrawable)background). 
     setColor(getResources().getColor(R.color.anycolor)); 
} 
+0

Позвольте мне проверить и ответить вам обратно. – Pankaj

+0

Я изменил код так, как вы предлагали, но не работает. – Pankaj

+0

Извините. Я отредактировал с правильным ответом. – mrcrv

0

я решил его с помощью кода ниже:

GradientDrawable drawable = (GradientDrawable) statusTextView 
          .getBackground(); 
drawable.setColor(context.getResources().getColor(
          R.color.green_color));