Android 视图扩展EditText会丢失样式且不可聚焦
为了方便起见,我尝试使用kotlin将EditText子类化(NumberEdit),但渲染视图会丢失大部分EditText属性。这是一个文本视图的外观,不能用鼠标聚焦(在模拟器中)。当我点击活动时,我可以编辑第一个NumberEdit小部件,并可以使用tab键循环到下一个小部件 我添加了两个模拟器屏幕截图来说明差异 编辑文本如下所示 新号码是这样的 扩展类如下所示:Android 视图扩展EditText会丢失样式且不可聚焦,android,android-layout,android-edittext,Android,Android Layout,Android Edittext,为了方便起见,我尝试使用kotlin将EditText子类化(NumberEdit),但渲染视图会丢失大部分EditText属性。这是一个文本视图的外观,不能用鼠标聚焦(在模拟器中)。当我点击活动时,我可以编辑第一个NumberEdit小部件,并可以使用tab键循环到下一个小部件 我添加了两个模拟器屏幕截图来说明差异 编辑文本如下所示 新号码是这样的 扩展类如下所示: import android.content.Context import android.text.InputType i
import android.content.Context
import android.text.InputType
import android.util.AttributeSet
import android.widget.EditText
class EditNumber(context: Context, attributeSet: AttributeSet?, defStyleAttr: Int, defStyleRes: Int)
: EditText(context, attributeSet, defStyleAttr, defStyleRes) {
constructor(context: Context) : this(context, null, 0, 0)
constructor(context: Context, attributeSet: AttributeSet?) : this(context, attributeSet, 0, 0)
constructor(context: Context, attributeSet: AttributeSet?, defStyleAttr: Int)
: this(context, attributeSet, defStyleAttr, 0)
init {
inputType = InputType.TYPE_CLASS_NUMBER + InputType.TYPE_NUMBER_FLAG_DECIMAL
}
}
有人知道我做错了什么吗?我必须明确引用某些属性吗?我不是kotlin专家,但如果您查看edittext的java源代码,您会发现:
public class EditText extends TextView {
public EditText(Context context) {
this(context, null);
}
public EditText(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.editTextStyle);
}
public EditText(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public EditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
看起来你没有把正确的参数传递给构造函数。。。传递大量0和null…是的,在kotlin中,所有构造函数都必须调用类的主构造函数,该构造函数在类签名中声明。由于其他构造函数没有设置主构造函数所需的所有参数,因此我必须传递null/0。EditText构造函数做同样的事情,但有一点不同,两个参数构造函数传递硬编码的editTextStyle Id。我想这就是我的问题所在。我今天晚些时候会试一试。谢谢你的提示!是的,这就解决了。唯一的区别是com.android.internal.R无法解决,但使用android.R似乎也能工作。@Candlejack很高兴我能帮上忙。