视图扩展 EditText 失去样式并且不可聚焦

Can*_*ack 2 android android-layout android-edittext

出于方便原因(NumberEdit),我尝试使用 kotlin 对 EditText 进行子类化,但渲染的 View 丢失了大部分 EditText 属性。外观是 TextView 的外观,它不能用鼠标(在模拟器中)聚焦。当我点击活动时,我可以编辑第一个 NumberEdit 小部件,并可以使用 Tab 键循环到下一个。

我添加了两个模拟器屏幕截图来说明差异。

一个 EditText 看起来像这样

一个 EditText 看起来像这样

新的 NumberEdit 看起来像这样

新的 NumberEdit 看起来像这样

扩展类如下所示:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?我是否必须明确引用某些属性?

War*_*zit 5

我不是 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);
    }
Run Code Online (Sandbox Code Playgroud)

看起来您没有将正确的参数传递给构造函数……您传递了很多 0 和空值……