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

Gen*_* S. 10 android view android-edittext

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

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

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

要明确的是,我不需要上面描述的Phone特定功能的帮助(我已经完成了所有工作),我正在尝试理解如何以默认情况下的其他功能扩展View,所以因为不必一遍又一遍地使用相同的代码来混乱我的活动.

Kni*_*edi 24

实际上没有什么复杂的.通常,您会在代码中将EditFilter应用于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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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