当 EditText 为空时,在 EditText 中设置文本 0,并在用户开始在 Android Kotlin 的 EditText 中键入值时删除该 0

Set Text 0 in EditText when its empty and remove that 0 when user starts typing value in EditText in Android Kotlin

提问人:Ankul Parmar 提问时间:11/6/2023 最后编辑:Ankul Parmar 更新时间:11/6/2023 访问量:66

问:

当 EditText 为空时,设置文本 0,当用户开始在 EditText 中键入值时,在 Android kotlin 中删除该 0

我已经尝试了 Textwatcher afterTextChanged 并实现了多个条件,但它们都不起作用......

问.2

android:hint=“0” 对 bcz 没有帮助,它会显示文本但不会填充 editText,并且此 EditText 值用于计算,因此当它为空时它必须为 0

Android Kotlin 验证 输入 android-edittext

评论

1赞 Marcin Orlowski 11/6/2023
为什么?只需将 tge 值设置为 0,如果用户想要更改,他/她将删除旧值并放置新值。0 被特殊对待是没有意义的。这对我来说闻起来很糟糕。如果你想给用户一个提示,为什么不使用提示功能,如果 EditText?
0赞 Ankul Parmar 11/6/2023
好友放置提示无济于事,因为它不会填充 editText,我必须在计算中使用这个 EditText 值,所以它不能为空......

答:

0赞 Ankul Parmar 11/6/2023 #1
val calculationTextWatcher: TextWatcher = object : TextWatcher {
            override fun befor`enter code here`eTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}

            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}

            override fun afterTextChanged(p0: Editable?) {
                if (holder.binding.tvBagsBuyerAuctionItemAdapter.text.toString().isNullOrBlank()) {
                    holder.binding.tvBagsBuyerAuctionItemAdapter.setText("0")
                    holder.binding.tvBagsBuyerAuctionItemAdapter.setSelection(1)
                }
                if (holder.binding.tvBagsBuyerAuctionItemAdapter.text.toString().length >= 2 && holder.binding.tvBagsBuyerAuctionItemAdapter.text.toString()
                        .startsWith("0")
                ) {
                    val subStr =
                        holder.binding.tvBagsBuyerAuctionItemAdapter.text.toString().substring(1)
                    holder.binding.tvBagsBuyerAuctionItemAdapter.setText(subStr)
                    holder.binding.tvBagsBuyerAuctionItemAdapter.setSelection(1)
                }
                
            }
        }

这完全没问题......!

2赞 MãĴď 11/6/2023 #2

你累了吗?我敢肯定这就是你要找的那个。

<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter your text here"/>

或者你可以在代码中这样做。

val editText = findViewById(R.id.editText) as EditText 
editText.hint = "Enter your text here"

评论

0赞 Ankul Parmar 11/6/2023
我试过放提示,但问题是我不能让它保持空,因为我必须在计算中使用这个编辑文本值,所以当它的空和提示只会显示文本时它必须为零,但它不会填充 editText 所以这不起作用
0赞 MãĴď 11/6/2023
然后将其添加为文本?它将始终为零。可以使用 get text 获取 editText 值并使用它。如果您想在其他活动中使用它,则 intent 或共享首选项有效。注意:您原来的问题不包括这一点
1赞 Marcin Orlowski 11/6/2023 #3

用于计算,因此当它为空时它必须为 0

首先,它要么是空的,要么是 .不能两者兼而有之。那么,为什么不简单地将 作为默认值并不允许将测试编辑为空呢?为什么空/'0'甚至被特殊对待 - 它只是使这里的事情复杂化,对你没有任何帮助。00

正如我在上面的评论中已经说过的,您的问题中描述的方法(与观察者等)看起来像糟糕的 U/X,在我看来,您似乎试图解决实际上不存在的问题。然后我意识到,如果你想在文本编辑中输入新值时让用户的生活更轻松(这样他/她就不需要先删除旧值),那么你真正需要的就是选择焦点上的内容,所以任何用户输入都会自动覆盖旧内容+这种行为会提前让用户清楚(他/她将看到选择)。所以对我来说,你应该做的就是添加

android:selectAllOnFocus="true"

到你的元素,然后收工。EditText