Расширение EditText в Android. Что я делаю не так?

Поэтому я пытаюсь понять использование пользовательских элементов управления в Android. Но мое приложение падает при попытке создать активность. Вот код:

package com.myApp; import android.content.Context; import android.widget.EditText; import android.view.View; import android.view.View.OnClickListener; public class MyEditText extends EditText implements OnClickListener { public MyEditText(Context context) { super(context); // TODO Auto-generated constructor stub } public void FlashBorder() { //do some custom action } @Override public void onClick(View v) { // TODO Auto-generated method stub EditText txt = (EditText) v; txt.selectAll(); } } 

Вот макет xml:

 <com.myApp.MyEditText android:id="@+id/edtTaskName" android:layout_height="wrap_content" android:layout_width="match_parent"/> 

Вам нужно будет реализовать эти конструкторы:

 public class TestEditText extends EditText { public TestEditText(Context context) { super(context); } public TestEditText(Context context, AttributeSet attrs) { super(context, attrs); } public TestEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public TestEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } } 

Например, попробуйте сделать следующее:

 public TestEditText(Context context, AttributeSet attrs) { super(context, attrs); Log.i("attribute name at index 0", attrs.getAttributeName(0)); } 

Вы получите следующее в своем логарифме:

 attribute name at index 0 = id 

Поэтому для доставки этих атрибутов XML в класс Super (EditText) вы должны переопределить эти конструкторы.

Надеюсь, это поможет.

Вы должны добавить этот конструктор для создания любого пользовательского представления.

 public MyEditText(Context context, AttributeSet attrs) { super(context, attrs); ..... } 

вместо

 public MyEditText(Context context) { super(context); // TODO Auto-generated constructor stub } 
 import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; import android.graphics.Typeface; import android.os.Build; import android.util.AttributeSet; /** * Created by rohann on 14/07/2016. */ public class LightEditText extends android.widget.EditText{ public LightEditText(Context context) { super(context); setFont(); } public LightEditText(Context context, AttributeSet attrs) { super(context, attrs); setFont(); } public LightEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setFont(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public LightEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); setFont(); } /** * This method is used to set the given font to the TextView. */ private void setFont() { Typeface typeface = TypefaceCache.get(getContext().getAssets(), "fonts/Roboto-Light.ttf"); setTypeface(typeface); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); } }