Android,从EditText中dynamic改变下划线颜色

是否有可能dynamic改变EditText下划线的颜色? 就像效果一样,当我把它聚焦的时候,它变成了蓝色。

希望你明白我想要做什么。

Solutions Collecting From Web of "Android,从EditText中dynamic改变下划线颜色"

创build您自己的自定义EditText控件

这里是我为你做的一个例子:

选中后,您必须更改mPaint.setColor(Color.GREEN); 到另一种颜色

public class CustomEditText extends EditText{ private Rect mRect; private Paint mPaint; int widthMsSize; int heightMsSize ; // we need this constructor for LayoutInflater public CustomEditText(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(5); mPaint.setColor(Color.GREEN); System.out.println("constructor"); } protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { // Extract the Ms (MesaureSpec) parameters widthMsSize = MeasureSpec.getSize(widthMeasureSpec); heightMsSize = MeasureSpec.getSize(heightMeasureSpec); System.out.println("on measure"); // Satisfy contract by calling setMeasuredDimension setMeasuredDimension(widthMsSize, heightMsSize); } protected void onDraw(Canvas canvas) { canvas.drawLine(5, heightMsSize-10, widthMsSize-5, heightMsSize-10, mPaint); //draw underline canvas.drawLine(8, heightMsSize-10,8, heightMsSize-20, mPaint); //draw left corner canvas.drawLine(widthMsSize-8, heightMsSize-10,widthMsSize-8, heightMsSize-20, mPaint); //draw right corner super.onDraw(canvas); } 

}

main.xml中

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.example.testanimationfadeinfadeout.CustomEditText android:id="@+id/textedit" android:layout_width="228dp" android:layout_height="41dp" android:ems="10" android:hint="color is changed" /> </LinearLayout> 
 public static void setEditTextUnderlineColor(final EditText editText, final int focusedColor, final int unfocusedColor) { editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { editText.getBackground().setColorFilter(focusedColor, PorterDuff.Mode.SRC_ATOP); return; } editText.getBackground().setColorFilter(unfocusedColor, PorterDuff.Mode.SRC_ATOP); } }); editText.getBackground().setColorFilter(unfocusedColor, PorterDuff.Mode.SRC_ATOP); 

要自定义编辑文本我做了以下的方法。 它为我工作很简单的方法。

 public class CardNumberText extends EditText { boolean isFocus; Paint mPaint; Rect mRect; int widthSize, heightSize; public CardNumberText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initStyle(); } private void initStyle() { mRect = new Rect(); mPaint = new Paint(); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(Color.parseColor("#B3B3B3")); } public CardNumberText(Context context, AttributeSet attrs) { super(context, attrs); initStyle(); } public CardNumberText(Context context) { super(context); initStyle(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Rect rect = mRect; Paint paint = mPaint; if (isFocus) { mPaint.setStrokeWidth(3.0f); mPaint.setColor(Color.parseColor("#80CBC4")); } else { mPaint.setStrokeWidth(1.5f); mPaint.setColor(Color.parseColor("#B3B3B3")); } for (int i = 0; i < getLineCount(); i++) { int baseline = getLineBounds(i, rect); canvas.drawLine(rect.left, baseline + 20, rect.right, baseline, paint); } } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (focused) { isFocus = true; } else { isFocus = false; } } }