0

firstble 我为我糟糕的英语道歉。我对编程还很陌生,我在使这个复合视图工作时遇到了麻烦。所以我用两个视图创建它的布局

  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 时,即使使用了 invalidate() 和 postInvalidate(),EditText 的文本颜色也保持不变;

4

1 回答 1

0

加入editableText.setTextColor(color);_setColor(int color)

public void setColor(int color)
{
    this.color = color;
    editableText.setTextColor(color);
}
于 2020-03-29T02:41:02.880 回答