Gradient Drawable - получение цвета обводки программно - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть текст для редактирования, фон которого как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="2dip"
    android:layout_height="2dip"
    android:shape="rectangle" >
    <corners
        android:radius="2dp"
        />
    <gradient
        android:angle="45"
        android:centerX="35%"
        android:centerColor="#fff"
        android:startColor="#fff"
        android:endColor="#fff"
        android:type="linear"
        />
    <padding
        android:left="0dp"
        android:top="0dp"
        android:right="0dp"
        android:bottom="0dp"
        />
    <size
        android:width="250dp"
        android:height="50dp"
        />
    <stroke
        android:width="1dp"
        android:color="@color/mygray"
        />
</shape> 

it create a gray line border around edit Editext

Мне нужно изменить этот цвет, когда есть ошибка проверки и установленэто к красному.На addTextChangedListener мне нужно сбросить его на серый цвет.

ниже моя функция изменения цвета

     public void changeBackgroudndOnEditTextChange(EditText ... editTexts){
            for(EditText editText:editTexts){
                editText.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {
                    }

                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    setBackground(editText,context.getResources().getColor(R.color.red_color));

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                    }
                });
            }



private void setBackground(View v, int backgroundColor) {
        GradientDrawable shape = new GradientDrawable();
        shape.setSize(v.getWidth(), v.getHeight());
        shape.setStroke(5,backgroundColor);
        v.setBackgroundDrawable(shape);
    }

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

1 Ответ

0 голосов
/ 04 декабря 2018

Вы можете просто сохранить последний фон, установленный в теге, и контрольный тег.Просто добавьте следующие строки в начало setBackground

Integer color = v.getTag();
if (color != null && color.intValue() == backgroundColor )
    return;
v.setTag(Integer.valueof(backgroundColor));
...