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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:00:53