如何从TextInputLayout获取起始与结束图标视图?
获取TextInputLayout的起始/结束图标视图并检测悬停状态
1. 拿到图标视图的两种方式
方式一:用Material库提供的现成方法
如果你用的是Material Components的TextInputLayout,直接调用官方方法就能拿到图标:
- 起始图标:
getStartIconView()(Kotlin里可直接用startIconView属性) - 结束图标:
getEndIconView()(Kotlin对应endIconView属性)
示例代码:
val til = findViewById<TextInputLayout>(R.id.your_til_id) val startIcon = til.startIconView val endIcon = til.endIconView
TextInputLayout til = findViewById(R.id.your_til_id); ImageView startIcon = til.getStartIconView(); ImageView endIcon = til.getEndIconView();
方式二:通过ID查找(兼容旧版本)
如果你的Material库版本较低,上述方法不可用,可以直接通过系统生成的ID查找:
- 起始图标ID:
R.id.text_input_start_icon - 结束图标ID:
R.id.text_input_end_icon
示例:
val startIcon = til.findViewById<ImageView>(R.id.text_input_start_icon)
2. 监听悬停状态
拿到图标视图后,给它设置OnHoverListener就能检测悬停事件了:
startIcon?.setOnHoverListener { _, event -> when (event.action) { MotionEvent.ACTION_HOVER_ENTER -> { // 鼠标/触控笔进入图标区域,执行你的操作 true } MotionEvent.ACTION_HOVER_EXIT -> { // 离开图标区域,处理对应逻辑 true } else -> false } }
if (startIcon != null) { startIcon.setOnHoverListener((v, event) -> { switch (event.getAction()) { case MotionEvent.ACTION_HOVER_ENTER: // 进入悬停逻辑 return true; case MotionEvent.ACTION_HOVER_EXIT: // 退出悬停逻辑 return true; default: return false; } }); }
注意事项
- 确保项目依赖Material Components库,且版本不低于1.2.0(低版本可能没有
getStartIconView这类方法) - 如果图标未启用(比如
app:startIconEnabled="false"),拿到的视图会是null,使用前必须判空 - 悬停事件仅支持有鼠标/触控笔输入的设备,普通触摸手机不会触发该事件
内容的提问来源于stack exchange,提问作者ToolDroid
相关产品推荐
相关产品推荐

