android - 如何使自定义视图在Android中继承其父样式
问题描述
使用 Switch 我可以做到这一点:
< Switch
android:id="@+id/normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:gravity="end|center_vertical"
android:switchPadding="16dp"
android:thumbTextPadding="16dp"
android:text="Hello World" />
注意这一行:
android:switchPadding="16dp"
android:thumbTextPadding="16dp"
现在,我制作了一个扩展此 Switch 的自定义视图。我没有做任何特别的改变:
import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.SwitchCompat
class BetterSwitchCompat : SwitchCompat {
private var listener: OnCheckedChangeListener? = null
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int)
: super(context, attrs, defStyleAttr)
override fun setOnCheckedChangeListener(listener: OnCheckedChangeListener?) {
if (listener != null) {
this.listener = listener
}
super.setOnCheckedChangeListener(listener)
}
fun setCheckedSilent(checked: Boolean) {
toggleListener(false)
isChecked = checked
toggleListener(true)
}
private fun toggleListener(value: Boolean) {
if (value) setOnCheckedChangeListener(listener)
else setOnCheckedChangeListener(null)
}
}
如您所见, check方法只不过是一个业务逻辑。
为什么我不能使用我之前提到的新类的属性?
关于这个只有几篇文章,但没有一个能澄清我在问什么。
解决方案
Switch
不是SwitchCompat
。SwitchCompat
来自 AndroidX,因此它使用应用程序定义的属性。
尝试在有问题的属性前面加上 ,app:
而不是android:
,例如app:switchPadding
.
推荐阅读
- kotlin - 使用 Spring Data Neo4j 的 Spring Web Flux 项目是否有事务支持(TransactionalOperator)?
- ipad - 在 iOS / iPad 上编写绘画应用程序的最佳方法
- pytorch - 为什么这个例子中的这个 tensor.unfold 方法会增加一个维度呢?
- openshift - Hawtio 在 openshift 上的骆驼集群解决方案
- java - 如何使用 Fields 设置值动态调用 setter 方法?
- mysql - Mysql从information_schema获取错误信息
- html - 第n次点击可能吗?
- graph - 如何在 dgl.nn.pytorch.conv.NNConv 中定义 edge_func 参数?
- python - 如何使用 tweepy 从状态对象中获取全文?
- amazon-redshift - Redshift - 如何显示 CASCADE 将删除的依赖项?