如何修改TextField获焦时底部边框颜色并在失焦时恢复默认?
解决TextField获焦变色、失焦恢复默认的问题
嗨,我来帮你搞定这个小问题!你已经成功实现了获焦时的颜色修改,现在只需要给TextField加上焦点状态监听,就能在它失去焦点时自动恢复默认颜色啦。
具体实现步骤:
先保存默认的颜色过滤器
在初始化TextField的时候,先把它原本的背景颜色过滤器存下来,这样后面才能准确恢复到初始状态:TextField v = this.page.getViewById<TextField>("a"); // 保存默认的颜色过滤器,用于失焦时恢复 ColorFilter defaultColorFilter = v.android.getBackground().getColorFilter();添加焦点变化监听器
通过setOnFocusChangeListener监听TextField的焦点状态,在获焦和失焦时分别设置对应的颜色:v.android.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener() { @Override public void onFocusChange(android.view.View view, boolean hasFocus) { Drawable drawable = view.getBackground(); if (hasFocus) { // 获焦时设置自定义的红色 drawable.setColorFilter(new Color("#b21755").android, android.graphics.PorterDuff.Mode.SRC_ATOP); } else { // 失焦时恢复之前保存的默认颜色过滤器 drawable.setColorFilter(defaultColorFilter); } // 强制视图刷新,确保颜色变化立即生效 view.invalidate(); } });
为什么之前的方案没生效?
你之前只设置了一次颜色过滤器,没有监听焦点变化,所以TextField失去焦点后,颜色过滤器不会自动重置。通过焦点监听器,我们就能在状态切换时主动修改颜色啦。
额外注意事项
如果你的TextField使用的是默认的StateListDrawable(也就是自带的焦点/常态样式),上面的方法依然有效。要是遇到特殊的背景Drawable,你也可以考虑在初始化时备份整个Drawable的状态,但保存颜色过滤器是更轻量的方案。
内容的提问来源于stack exchange,提问作者Royi Namir
相关产品推荐
相关产品推荐

