Android 如何使用4个EditText和addTextChangedListener创建PIN输入?
我正在尝试创建一个包含4个EdtiText单元格的安全代码登录页。基本上,我希望单元格限制为1位,一旦用户输入一位数字,它就会跳转到下一个编辑文本。当我们到达第四个也是最后一个单元格时,我希望应用程序自动检查整个代码,如果代码正确,则更改活动 以下是我的XML:Android 如何使用4个EditText和addTextChangedListener创建PIN输入?,android,kotlin,android-edittext,Android,Kotlin,Android Edittext,我正在尝试创建一个包含4个EdtiText单元格的安全代码登录页。基本上,我希望单元格限制为1位,一旦用户输入一位数字,它就会跳转到下一个编辑文本。当我们到达第四个也是最后一个单元格时,我希望应用程序自动检查整个代码,如果代码正确,则更改活动 以下是我的XML: <LinearLayout android:layout_width="match_parent" android:layout_height="wr
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_30sdp"
android:layout_marginEnd="@dimen/_40sdp"
android:layout_marginStart="@dimen/_40sdp"
android:orientation="horizontal">
<EditText
style="@style/LoginSecurityCode"
android:id="@+id/et_login_code_1"
android:imeOptions="actionNext"
android:nextFocusRight="@+id/et_login_code_2"/>
<EditText
style="@style/LoginSecurityCode"
android:id="@+id/et_login_code_2"
android:imeOptions="actionNext"
android:nextFocusRight="@+id/et_login_code_3"/>
<EditText
style="@style/LoginSecurityCode"
android:id="@+id/et_login_code_3"
android:imeOptions="actionNext"
android:nextFocusRight="@+id/et_login_code_4"/>
<EditText
style="@style/LoginSecurityCode"
android:id="@+id/et_login_code_1"
android:imeOptions="actionNext"
android:nextFocusRight="@+id/et_login_code_2"/>
</LinearLayout>
以及每个编辑文本的我的样式:
<style name="LoginSecurityCode">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/_40sdp</item>
<item name="android:layout_marginEnd">@dimen/_8sdp</item>
<item name="android:layout_marginBottom">@dimen/_4sdp</item>
<item name="android:layout_marginStart">@dimen/_8sdp</item>
<item name="android:layout_gravity">center</item>
<item name="android:gravity">center</item>
<item name="android:textAlignment">center</item>
<item name="android:background">@null</item>
<item name="android:textSize">@dimen/_20ssp</item>
<item name="android:textColorHint">#50000000</item>
<item name="android:hint">@string/label_login_code_placeholder</item>
<item name="android:importantForAutofill" tools:ignore="NewApi">no</item>
<item name="android:inputType">numberDecimal</item>
<item name="android:maxLines">1</item>
<item name="android:maxLength">1</item>
</style>
匹配父项
@dimen/_40sdp
@尺寸/尺寸8sdp
@dimen/u 4sdp
@尺寸/尺寸8sdp
居中
居中
居中
@空的
@二甲基硅氧烷
#50000000
@字符串/标签\登录\代码\占位符
不
数字中心
1.
1.
重要的是要注意,我不想用4个不同的AddTextChangedListener使用noob方式,我想找到一种使用最少行Java/Kotlin的智能方式。为什么不添加自己的键盘,并在Textview上使用输入,而不是Edittext?虽然如果你继续使用目前的方法,那么你需要添加4个Watchersmm,是的,我认为创建自己的键盘实际上是一种更好的方式,让我在定制方面有更多的自由。我还将阻止清单中的软键盘,以防止不必要的重叠。如果你愿意,我可以给你所有的东西,我已经创建了OneHanks,但不需要,因为我想把它作为练习来做。我将使用GrildLayoutManager为键盘创建一个RecycleView,并使用LiveData管理实时按键。检查以下链接这可能会有所帮助!