自定义View组件为何无法触发state_pressed状态?
问题原因与解决方案
你的自定义TestButton未正确继承AppCompatButton的默认样式配置,导致按压状态逻辑无法生效。
核心问题
原生AppCompatButton的构造函数默认会传入androidx.appcompat.R.attr.buttonStyle作为defStyleAttr参数,这个属性关联了AppCompatButton的默认样式,其中包含处理按压状态、触摸反馈的核心逻辑。而你的自定义类将defStyleAttr默认值设为0,等于放弃了这些默认配置,控件因此无法正确触发状态切换。
修改方案
将构造函数的defStyleAttr默认参数替换为AppCompatButton的默认样式属性:
class TestButton @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = androidx.appcompat.R.attr.buttonStyle ) : AppCompatButton(context, attrs, defStyleAttr) { }
补充说明
如果修改后仍有异常,可在构造函数中显式设置按钮可点击(默认样式已包含该配置,此为兜底操作):
init { isClickable = true }
内容的提问来源于stack exchange,提问作者Clark Battle
相关产品推荐
相关产品推荐

