Android Studio(Kotlin)中获取输入框内容如何保留前导零
问题原因
设置android:inputType="number"后,组件会按数值规则处理输入内容,自动裁剪无意义的前导零,即使直接调用text.toString(),在部分系统版本、Material组件版本下,返回的内容也会丢失前导零。
解决方案
方案1(推荐):调整输入类型
你已经通过android:digits="01"限制了仅能输入0、1两个字符,不需要依赖number类型做输入校验,直接将inputType改为文本类型即可,既可以保留前导零,也不会影响输入限制,还能正常唤起数字键盘。
将XML中对应属性替换为:
android:inputType="text|textNoSuggestions"
修改后的完整布局代码:
<com.google.android.material.textfield.TextInputEditText android:id="@+id/binInput" android:digits="01" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-smallcaps" android:inputType="text|textNoSuggestions" android:textColor="@color/black" android:textSize="20sp" android:typeface="sans" />
修改后直接调用binInput.text.toString()即可获取完整带前导零的输入内容,输入"0001"时就能拿到完整的"0001"字符串。
方案2:保留number类型,手动存储原始输入
如果有特殊需求必须保留inputType="number"配置,可以给输入框添加文本监听,在输入过程中手动保存原始输入内容,后续业务逻辑直接使用保存的原始值即可。
Kotlin实现代码:
// 声明变量存储原始输入内容 private var rawBinInput: String = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.your_layout) // 给输入框绑定文本监听 binInput.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { rawBinInput = s?.toString() ?: "" } override fun afterTextChanged(s: Editable?) {} }) }
注意事项
- 不要在获取输入内容后主动调用
toInt()、toLong()等数值类型转换方法再转回字符串,这类操作同样会自动丢弃前导零。 - 若需要做二进制转十进制之类的数值计算,先保留原始字符串做展示/反转等字符串操作,需要计算时再单独做数值转换即可。
内容的提问来源于stack exchange,提问作者Andrei Pascari
相关产品推荐
相关产品推荐

