You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:09:12