Android 什么';it’扩展EditText的正确方法是为其添加“文本”;“违约”;功能

Android 什么';it’扩展EditText的正确方法是为其添加“文本”;“违约”;功能,android,view,android-edittext,Android,View,Android Edittext,我想知道是否可以向EditText添加功能,这样当我在布局xml中包含新扩展的字段时,我就不必向Activity类添加任何代码来让它以特定的方式运行 例如,我想创建一个EditPhone字段,它只是一个EditText,具有监听关键事件的附加功能,并修改该字段以在相应位置包含括号和破折号 目前,我总是需要手动包含侦听器代码并将其附加到视图。但是很明显,这个类中包含了大量的默认行为(例如,当您单击它时,它会显示键盘)。所以,我猜这不应该那么难,但我不清楚实现这一目标的步骤是什么 说得清楚一点,我不

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

例如,我想创建一个EditPhone字段,它只是一个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)" />


我会将onkey侦听器添加到init方法中?如果需要,请选择:是。但对文本输入的限制是由输入过滤器应用的。但是您可以在
init
中设置和修改任何您想要的内容。是的,我必须查看输入过滤器,看看这是否适用于我的问题,但是我知道您在做什么,您是对的。。。这很简单:)如果没有xml,我如何膨胀PhoneEditText?换句话说,如果我有数量未知的
phoneEditText