我想知道是否可以向 EditText 添加功能,以便当我在布局 xml 中包含新扩展的字段时,我不必向 Activity 类添加任何代码以使其以特定方式运行。
例如,我想创建一个 EditPhone 字段,它只是一个 EditText,它具有侦听关键事件并修改该字段以在适当位置包含括号和破折号的附加功能。
目前,我总是必须手动包含侦听器代码并将其附加到视图。但显然该类包含大量默认行为(例如,当您单击它时它会显示键盘)。所以,我猜这应该不会那么困难,但我不清楚实现这一目标的步骤是什么。
需要明确的是,我不需要上述电话特定功能的帮助(我已经解决了所有问题),我试图了解如何以默认情况下具有附加功能的方式扩展视图,所以以免一遍又一遍地使用相同的代码来扰乱我的活动。
事实上,这并没有什么复杂的。通常你会申请一个输入过滤器 http://developer.android.com/reference/android/text/InputFilter.html给你的EditText http://developer.android.com/reference/android/widget/EditText.html在你的代码中,这就能完成工作。但是,如果您看到其中的模式并且想要一个始终以这种方式运行的 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)" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)