如何在EditText中根据输入长度控制左侧Drawable的显示与隐藏?
哥们我懂你!找了一堆Stack答案都没解决,就是想让EditText输入内容长度刚好是11位时,左侧的Drawable显示出来对吧?这就给你上靠谱的实现方案!
具体实现步骤
1. 先搞定布局里的EditText
首先确保你的EditText在布局文件里已经配置了要显示的左侧Drawable,默认咱们先让它隐藏着:
<EditText android:id="@+id/targetEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入11位内容" android:drawableStart="@drawable/your_icon_drawable" <!-- 替换成你的图标资源 --> android:drawablePadding="10dp" android:inputType="text" /> <!-- 如果是手机号可以设成phone,过滤非数字 -->
2. 给EditText加文本监听逻辑
核心就是用TextWatcher监听输入内容的变化,在文本改变后判断长度是否等于11,动态控制Drawable的显示/隐藏:
EditText editText = findViewById(R.id.targetEditText); // 初始化时先把左侧Drawable隐藏 editText.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // 这个回调暂时用不上,留空就行 } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // 这里也可以处理,但afterTextChanged更适合判断最终输入长度 } @Override public void afterTextChanged(Editable s) { int inputLen = s.length(); // 获取你要显示的左侧Drawable,用ContextCompat避免版本兼容问题 Drawable leftIcon = ContextCompat.getDrawable(MainActivity.this, R.drawable.your_icon_drawable); if (leftIcon != null) { // 给Drawable设置边界,不然可能显示不出来 leftIcon.setBounds(0, 0, leftIcon.getIntrinsicWidth(), leftIcon.getIntrinsicHeight()); } // 判断长度是否为11,决定显示还是隐藏图标 if (inputLen == 11) { editText.setCompoundDrawables(leftIcon, null, null, null); } else { editText.setCompoundDrawables(null, null, null, null); } } });
3. 几个要注意的小细节
- 如果你的项目用了AndroidX,记得导入
androidx.core.content.ContextCompat这个类,不然ContextCompat.getDrawable()会报错。 - 要是只允许输入数字(比如手机号场景),可以把EditText的
android:inputType设为phone或者number,这样用户只能输入数字,避免非数字内容干扰长度判断。 - 确保你的Drawable资源尺寸合适,太大或太小都会影响显示效果,建议用矢量图适配不同分辨率的设备。
内容的提问来源于stack exchange,提问作者The MJ
相关产品推荐
相关产品推荐

