Search code examples
androidandroid-edittextandroid-drawable

android change color of an icon from EditText


I have the following EditText :

editText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_arrow_bottom_right_black_18dp, 0);

and I am trying to change the color of ic_arrow_bottom_right_black_18dp programatically using the below methods:

     protected void setEditTextDisabled(EditText editText) {
        editText.setFocusable(false);
        editText.setClickable(false);
        editText.setEnabled(false);
        editText.setTextColor(ContextCompat.getColor(getContext(), R.color.package_components_group_text_color));
        if (editText.getTag(R.id.values_list_selected_ids) == null) {
            if (editText.getTag(R.id.values_list_selected_ids) == null) {
                editText.setFocusableInTouchMode(true);
                Drawable[] d = editText.getCompoundDrawables();
                if (d.length == 4) {
                    d[2].setColorFilter(ContextCompat.getColor(getContext(), R.color.package_components_group_text_color), PorterDuff.Mode.SRC_ATOP);
                }
            }
        }
        Drawable background = editText.getBackground();

        if (background instanceof ShapeDrawable) {
//          ((ShapeDrawable)background).getPaint().setStroke(2, getResources().getColor(R.color.package_components_group_text_color));
//            ((ShapeDrawable)background).getPaint().setStroke(2, getResources().getColor(R.color.package_components_group_text_color));

        } else if (background instanceof GradientDrawable) {
            ((GradientDrawable)background).setStroke(2, getResources().getColor(R.color.package_components_group_text_color));
        } else if (background instanceof ColorDrawable) {
//            ((ColorDrawable)background).setStroke(2, getResources().getColor(R.color.package_components_group_text_color));
        }
    }

    protected void setEditTextEnabled(EditText editText) {
        editText.setEnabled(true);
        editText.setFocusable(true);
        editText.setClickable(true);
        editText.setTextColor(ContextCompat.getColor(getContext(), R.color.black));
        if (editText.getTag(R.id.values_list_selected_ids) == null) {
            editText.setFocusableInTouchMode(true);
            Drawable[] d = editText.getCompoundDrawables();
            if (d.length == 4) {
                  d[2].setColorFilter(ContextCompat.getColor(getContext(), R.color.black), PorterDuff.Mode.SRC_ATOP);
            }
        }

        Drawable background = editText.getBackground();
        if (background instanceof ShapeDrawable) {
         //   ((ShapeDrawable)background).getPaint().setColor(getResources().getColor(R.color.black));
        } else if (background instanceof GradientDrawable) {
            ((GradientDrawable)background).setStroke(2, getResources().getColor(R.color.black));
        } else if (background instanceof ColorDrawable) {
          //  ((ColorDrawable)background).setColor(getResources().getColor(R.color.black));
        }
    }

The issue is that the drawable right icon of the EditText become invisible or white when one of the above methods is called.

I attached a picture a picture with the icon of the edit text which is located on right side.


Solution

  • This is the right answer

    Drawable ddd = getResources().getDrawable(R.drawable.ic_arrow_bottom_right_black_18dp);
    Drawable drawable = DrawableCompat.wrap(ddd);
    
    DrawableCompat.setTint(drawable, ContextCompat.getColor(getContext(), R.color.package_components_group_text_color));
    
    editText.setCompoundDrawables(null, null, drawable, null);