Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 视图扩展EditText会丢失样式且不可聚焦_Android_Android Layout_Android Edittext - Fatal编程技术网

Android 视图扩展EditText会丢失样式且不可聚焦

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

为了方便起见,我尝试使用kotlin将EditText子类化(NumberEdit),但渲染视图会丢失大部分EditText属性。这是一个文本视图的外观,不能用鼠标聚焦(在模拟器中)。当我点击活动时,我可以编辑第一个NumberEdit小部件,并可以使用tab键循环到下一个小部件

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

编辑文本如下所示

新号码是这样的

扩展类如下所示:

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很高兴我能帮上忙。