扩展EditText的正确方法是什么?
问题在于:
我的模板有两个EditText的空应用程序:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="one"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="two"/>
</LinearLayout>
工作正常:
然后我从EditText创建自定义视图:
public class CuteEditText extends EditText {
public CuteEditText(Context context) {
this(context, null);
}
public CuteEditText(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CuteEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// some special initialization will be here
}
}
当我将EditText更改为CuteEditText时,界面工作不正确:
问题不仅在于视图用户界面。如果我在第一个EditText中键入内容而不是触摸第二个,则会发生nohing:输入将首先继续。
如果我从AppCompatEditText继承CuteEditText,则会出现相同的行为。
有什么问题?
获取答案 0 :(得分:0)
你的导师坏了。这应该是它的样子:
public class CuteEditText extends EditText {
public CuteEditText(Context context) {
super(context);
}
public CuteEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CuteEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
答案 1 :(得分:0)
您不需要第三个构造函数重载。第一个用于以编程方式创建视图,第二个用于从xml创建视图。对于大多数情况,这两个应该足够了。
public class CuteEditText extends EditText {
public CuteEditText(Context context) {
this(context, null);
}
public CuteEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
}