3

我写了一个子类EditText。这是那个子类:

package com.package.foo;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;

public class FuturaEditText extends EditText{

    public FuturaEditText(Context context) {
        this(context, null, 0);
    }

    public FuturaEditText(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public FuturaEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if(!isInEditMode()) {
            setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/futura.ttf"));
        }
    }

}

但它的行为不像一个EditText,而是一个TextView。特别是,软键盘没有上升焦点,也没有EditText格式化。为什么?

4

3 回答 3

5

为了完整性 - 从源头:

public EditText(Context context, AttributeSet attrs) {
       this(context, attrs, com.android.internal.R.attr.editTextStyle);
}

因此,如果在没有默认样式的情况下调用构造函数,则默认为editTextStyle

于 2013-04-16T16:46:14.323 回答
4

这个实现,每个构造函数调用匹配的super构造函数:

package com.package.foo;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;

public class FuturaEditText extends EditText{

    public FuturaEditText(Context context) {
        super(context);
        if(!isInEditMode()) {
            setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/futura.ttf"));
        }
    }

    public FuturaEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        if(!isInEditMode()) {
            setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/futura.ttf"));
        }
    }

    public FuturaEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if(!isInEditMode()) {
            setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/futura.ttf"));
        }
    }

}

作品。我只能假设EditText(context, attrs, 0)不一样EditText(context, attrs)

于 2013-04-16T14:58:44.123 回答
3

您不应该调用超级构造函数来完成缺少的参数,否则客户端无法调用少于 3 个参数的构造函数(即super.(Context context, AttributeSet attrs))。

第二个版本是正确的。

于 2013-04-16T15:02:20.423 回答