Android计算器APP:EditText隐藏下划线并显示白色光标实现方法
解决EditText隐藏下划线同时保留白色光标问题
我之前开发计算器APP时也碰到过完全一样的需求,试了好几种方法,最后这两个方案是最靠谱的:
方案一:纯XML布局配置(推荐,适配性强)
不用写任何代码,通过XML就能搞定,适配绝大多数Android版本:
- 先在
res/drawable目录下创建一个自定义光标样式文件white_cursor.xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 设置光标为纯白色 --> <solid android:color="#FFFFFF"/> <!-- 光标宽度,和安卓默认计算器保持一致 --> <size android:width="2dp"/> </shape>
- 然后在布局文件的EditText标签中添加这些属性:
<EditText android:id="@+id/calculator_input" android:layout_width="match_parent" android:layout_height="wrap_content" <!-- 隐藏默认下划线 --> android:background="@null" <!-- 引用自定义的白色光标 --> android:textCursorDrawable="@drawable/white_cursor" <!-- 输入文字设为白色,和光标风格统一 --> android:textColor="#FFFFFF" android:textSize="36sp" <!-- 输入内容右对齐,和默认计算器布局一致 --> android:gravity="end" <!-- 适配计算器的输入类型 --> android:inputType="numberDecimal|numberSigned"/>
方案二:代码动态设置(兼容特殊场景)
如果需要适配老版本系统,或者要动态切换光标样式,可以用代码实现:
Kotlin版本
val calculatorInput = findViewById<EditText>(R.id.calculator_input) // 隐藏下划线 calculatorInput.setBackgroundResource(android.R.color.transparent) // 设置白色光标 try { val cursorField = TextView::class.java.getDeclaredField("mCursorDrawableRes") cursorField.isAccessible = true cursorField.set(calculatorInput, R.drawable.white_cursor) } catch (e: Exception) { // 捕获异常避免崩溃 e.printStackTrace() }
Java版本
EditText calculatorInput = findViewById(R.id.calculator_input); calculatorInput.setBackgroundResource(android.R.color.transparent); try { Field cursorField = TextView.class.getDeclaredField("mCursorDrawableRes"); cursorField.setAccessible(true); cursorField.set(calculatorInput, R.drawable.white_cursor); } catch (Exception e) { e.printStackTrace(); }
小提示:如果用
android:background="@null"觉得布局有边距问题,可以换成android:background="@android:color/transparent",效果完全一致,不会影响光标显示。
内容的提问来源于stack exchange,提问作者Hasan Abdullah
相关产品推荐
相关产品推荐

