Can*_*ack 2 android android-layout android-edittext
出于方便原因(NumberEdit),我尝试使用 kotlin 对 EditText 进行子类化,但渲染的 View 丢失了大部分 EditText 属性。外观是 TextView 的外观,它不能用鼠标(在模拟器中)聚焦。当我点击活动时,我可以编辑第一个 NumberEdit 小部件,并可以使用 Tab 键循环到下一个。
我添加了两个模拟器屏幕截图来说明差异。
一个 EditText 看起来像这样
新的 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)
有谁知道我做错了什么?我是否必须明确引用某些属性?
我不是 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 和空值……
| 归档时间: |
|
| 查看次数: |
1245 次 |
| 最近记录: |