什么是扩展EditText以使其具有额外“默认”功能的正确方法

时间:2011-09-22 16:56:32

标签: android view android-edittext

我想知道是否可以向EditText添加功能,这样当我在布局xml中包含我的新扩展字段时,我不必再将任何代码添加到Activity类中以使其在特定的行为中运行方式。

例如,我想创建一个EditPhone字段,它只是一个EditText,它具有监听关键事件和修改字段以在其适当位置包括括号和短划线的附加功能。

目前,我总是需要包含侦听器代码并手动将其附加到视图中。但显然这个类有很多默认行为包含在其中(例如,当你点击它时会弹出键盘)。所以,我猜它不应该那么艰难,但我不清楚实现这一目标的步骤是什么。

要明确的是,我不需要上面描述的Phone特定功能的帮助(我已经解决了所有问题),我正在尝试了解如何以一种通过其他方式实现其他功能的方式扩展View默认情况下,以免不得不一遍又一遍地使用相同的代码来混乱我的活动。

1 个答案:

答案 0 :(得分:24)

实际上并没有什么复杂的。通常,您会在代码中将InputFilter应用于EditText,这样就可以完成任务。但是如果你看到一个模式,并希望EditText始终以这种方式运行,你就可以这样创建一个自定义小部件:

public class PhoneEditText extends EditText {

    public PhoneEditText(Context context) {
        super(context);
        init();
    }

    public PhoneEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public PhoneEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
            // set your input filter here
    }
}

在XML布局中,您只需使用自定义类的完整路径,而不是EditText:

<my.package.path.to.PhoneEditText
   attribute="value (all EditText attributes will work as they did before)" />