Составной вид: невозможно изменить цвет editText с помощью invalidat () - PullRequest
0 голосов
/ 29 марта 2020

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

  1. EditText: для ввода пользовательского ввода
  2. ImageView: для настройки EditText включен

    <EditText
        android:inputType="text"
        android:layout_width="200dp"
        android:ems="10"
        android:layout_height="50dp"
        android:id="@+id/edittext_field"/>
    
    <ImageView
        android:layout_height="50dp"
        android:layout_width="30dp"
        android:src="@drawable/ic_edit"
        android:id="@+id/imageview_edit"
        android:background="#7388A4"/>
    

затем я создал EditableView класс и настроил все переменные и атрибуты ...

public class EditableView extends LinearLayout
{

    private boolean isEditable=false;

    private boolean isValide=true;

    private int color=0XFF000000;

    private String text="this field is empty";

    private int textLength;

    public EditableView(Context context){

        super(context);
    }

    public EditableView(Context context,AttributeSet attr){

        super(context,attr);

        TypedArray typedArray=context.obtainStyledAttributes(attr,R.styleable.EditableView);

    try{
        isEditable=typedArray.getBoolean(R.styleable.EditableView_setEditable,false);
        isValide=typedArray.getBoolean(R.styleable.EditableView_isValide,true);
        color=typedArray.getColor(R.styleable.EditableView_color,0);
        text=typedArray.getString(R.styleable.EditableView_text);
        }

    finally{

        typedArray.recycle();

        }

        initView(context,attr);
    }

    public void setEditable(boolean isEditable)
    {
        this.isEditable = isEditable;
    }

    public boolean isEditable()
    {
        return isEditable;
    }

    public void setIsValide(boolean isValide)
    {
        this.isValide = isValide;
    }

    public boolean isValide()
    {
        return isValide;
    }

    public void setColor(int color)
    {
        this.color = color;
    }

    public int getColor()
    {
        return color;
    }

    public void setText(String text)
    {
        this.text = text;
        invalidate();
    }

    public String getText()
    {
        return text;
    }


    public void initView(Context context,AttributeSet attr){

        LayoutInflater.from(getContext()).inflate(R.layout.custom_edit_view,this,true);

    }

    @Override
    protected void onFinishInflate()
    {
        // TODO: Implement this method
        super.onFinishInflate();

        final EditText editableText=(EditText)findViewById(R.id.edittext_field);
        ImageView editImage=(ImageView)findViewById(R.id.imageview_edit);

        editableText.setText(text);

        editableText.setTextColor(color);

        editableText.setEnabled(isEditable);


        editImage.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View p1)
                {
                    // TODO: Implement this method

                textLength=editableText.getText().length();

                    if(isEditable){

                        if(textLength<8){

                            isValide=false;
                            color=Color.RED;

                        }else{
                            isValide=true;
                            color=Color.BLACK;
                            isEditable=false;
                            }
                    }else{
                            isEditable=true;
                            }
                    setEditable(isEditable);
                    setColor(color);
                    editableText.postInvalidate();
                    }

                });
    }

наконец я поместил свой вид в Макет основной активности

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="top|center_horizontal"
    android:id="@+id/home"
    android:orientation="vertical"
    android:background="#282828"
    android:padding="10dp">
    <com.tomouh.com.didin.recorder.customviews.EditableView
        android:id="@+id/editableView"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="center|center_vertical"
        android:padding="4dp"
        android:layout_marginBottom="10dp"
        app:text="some text"
        app:color="#ee9900"
        android:background="#FFFFFF">
    </com.com.didin.recorder.customviews.EditableView>

</LinearLayout>

по какой-то причине, когда я нажимаю ImageView, цвет текста EditText остается неизменным даже после использования invalidate () и postInvalidate ();

1 Ответ

0 голосов
/ 29 марта 2020

Добавить editableText.setTextColor(color); в setColor(int color)

public void setColor(int color)
{
    this.color = color;
    editableText.setTextColor(color);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...