开发者

Extending a EditText in Android. What am I doing wrong?

开发者 https://www.devze.com 2023-04-10 07:17 出处:网络
So I\'m trying to get a grasp of using custom controls in Android. But my app crashes on trying to create the activity. Here\'s the code:

So I'm trying to get a grasp of using custom controls in Android. But my app crashes on trying to create the activity. Here's the code:

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 voi开发者_高级运维d FlashBorder()
    {
        //do some custom action
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        EditText txt = (EditText) v;
        txt.selectAll();
    }
}

Here's the layout xml:

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


You will need to implement these constructors:

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

for example try to do the following :

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

you will get the following in your logcat :

attribute name at index 0 = id 

so to deliver these XML attributes to the Super class (EditText) you have to override these constructors.

Hope that Helps.


You have to add this constructor for creating any custom View.

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

instead of

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号