czy możliwe jest dynamiczne zmienianie koloru podkreślenia z EditText? Podobnie jak efekt, gdy go ustawiam, zmienia się w niebieski.Android, zmiana podkreślenia Kolor z EditText dynamicznie
Mam nadzieję, że rozumiesz, co chcę robić.
czy możliwe jest dynamiczne zmienianie koloru podkreślenia z EditText? Podobnie jak efekt, gdy go ustawiam, zmienia się w niebieski.Android, zmiana podkreślenia Kolor z EditText dynamicznie
Mam nadzieję, że rozumiesz, co chcę robić.
utworzyć własny kontrolę EditText
Oto przykład, że tworzył dla Ciebie:
Po wybraniu pliku juste trzeba zmienić mPaint.setColor (Color.GREEN); na inny kolor
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>
Aby dostosować edytować tekst zrobiłem następujący sposób. To działało dla mnie w całkiem prosty sposób.
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;
}
}
}
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);
Stary post, ale wciąż świetny – oga
Wow, Dzięki za tym szybko i pomocnego postu! Jeszcze jedno (głupie) pytanie. Jeśli chcę dodać dynamicznie w moim projekcie CustomEditText, co powinienem umieścić w AttributeSet? Miły wieczór, tak bardzo dziękuję i przepraszam za zły angielski;) –
cześć ponownie! AttributeSet to właściwości, które zadeklarowałeś w swoim xml jak android: podpowiedź, itp. Jeśli nie potrzebujesz tego, musisz użyć publicznego CustomEditText (kontekst kontekstu) {super (kontekst); ...} jako konstruktor ps: nie ma głupie pytanie na stackoverflow! :) – Frank
Witam po raz trzeci! Mam teraz nowy problem. Nie dostaję żadnego EditText na moim layoucie. Czy muszę nadpisać niektóre funkcje, takie jak getDraw lub coś, co używa układu? Mój kod: 'layout = (LinearLayout) findViewById (R.id.main_layout); CustomEditText customET = new CustomEditText (this); // getApplicationContext(); nie działa też. customET.setText (tekst); customET.setLayoutParams (new LayoutParams ( \t LayoutParams.FILL_PARENT, \t LayoutParams.WRAP_CONTENT)); layout.addView (customET); ' Masz pojęcie, jaki może być problem? –