Android 如何使自定义视图继承其父项的样式
How to make a custom view inherit it's parent's style in 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 方法只有一个业务逻辑。
为什么我不能将之前提到的属性用于新的 class?
关于此的帖子只有几篇,但其中 none 阐明了我的问题。
Android custom view inherit all styles and attributes from parent
How to make a custom view inherit it's parent's style
Switch
不是 SwitchCompat
。 SwitchCompat
来自 AndroidX,因此它使用应用程序定义的属性。
尝试使用 app:
而不是 android:
作为有问题的属性的前缀,例如 app:switchPadding
.
使用 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 方法只有一个业务逻辑。
为什么我不能将之前提到的属性用于新的 class?
关于此的帖子只有几篇,但其中 none 阐明了我的问题。
Android custom view inherit all styles and attributes from parent
How to make a custom view inherit it's parent's style
Switch
不是 SwitchCompat
。 SwitchCompat
来自 AndroidX,因此它使用应用程序定义的属性。
尝试使用 app:
而不是 android:
作为有问题的属性的前缀,例如 app:switchPadding
.