traduccion custom java android android-edittext android-custom-view extend

java - traduccion - custom view android kotlin



Extendiendo un EditText en Android. ¿Qué estoy haciendo mal? (3)

Debe agregar este constructor para crear cualquier vista personalizada.

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

en lugar de

public MyEditText(Context context) { super(context); // TODO Auto-generated constructor stub }

Así que estoy tratando de entender el uso de controles personalizados en Android. Pero mi aplicación falla al intentar crear la actividad. Aquí está el código:

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(); } }

Aquí está el diseño xml:

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


Necesitarás implementar estos constructores:

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); } }

por ejemplo, intente hacer lo siguiente:

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

obtendrá lo siguiente en su logcat:

attribute name at index 0 = id

así que para entregar estos atributos XML a la clase Súper (EditText) tienes que anular estos constructores.

Espero que ayude.


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); } }