没有@{}就没有设置自定义视图自定义属性
Custom view custom attribute not being set without @{}
所以我有一个具有此属性的自定义视图:
private var mLabelText: String = "DEFAULT"
var labelText: String
set(value) {
if (mLabelText != value) {
mLabelText = value
invalidate()
}
}
get() { return mLabelText }
并在attr.xml
中定义为
<declare-styleable name="CustomView">
<attr name="labelText" format="string"/>
</declare-styleable>
现在,如果我尝试在我的布局中这样做 XML 来设置值,它不起作用(文本仍然显示 'DEFAULT')
<CustomView
...
app:text="NewText" />
但是,如果我这样做,它会起作用:
<CustomView
...
app:text="@{`NewText`}" />
那么是什么原因呢?
为什么像 TextView
这样的视图允许我执行 android:text="Text"
而不是必须编写 android:text="@{`Text`}
,但我自己的自定义视图不会?
Mike 的评论解答了我对不同语法的困惑。
我最终做的是继承现有的androidTextView。 TextView 有一堆我需要的东西,比如字体、字体大小等,所以继承起来比 re-implement 自己更简单。
所以我有一个具有此属性的自定义视图:
private var mLabelText: String = "DEFAULT"
var labelText: String
set(value) {
if (mLabelText != value) {
mLabelText = value
invalidate()
}
}
get() { return mLabelText }
并在attr.xml
中定义为
<declare-styleable name="CustomView">
<attr name="labelText" format="string"/>
</declare-styleable>
现在,如果我尝试在我的布局中这样做 XML 来设置值,它不起作用(文本仍然显示 'DEFAULT')
<CustomView
...
app:text="NewText" />
但是,如果我这样做,它会起作用:
<CustomView
...
app:text="@{`NewText`}" />
那么是什么原因呢?
为什么像 TextView
这样的视图允许我执行 android:text="Text"
而不是必须编写 android:text="@{`Text`}
,但我自己的自定义视图不会?
Mike 的评论解答了我对不同语法的困惑。
我最终做的是继承现有的androidTextView。 TextView 有一堆我需要的东西,比如字体、字体大小等,所以继承起来比 re-implement 自己更简单。