gpt4 book ai didi

java - 如何限制android中edittext的输入时间

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:23 25 4
gpt4 key购买 nike

我必须允许用户在即时编辑文本时仅以##:## 格式输入时间,有什么办法可以实现吗?我使用了以下代码,但它不起作用。

我可以输入超过 24 个值的数字,例如 45623:5689。

edit.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME)

甚至 android:text="time" 也不工作。

我怎样才能做到这一点。谁能建议我该怎么做。

我想允许用户在前 2 个位置输入最多 23 个值,然后强制输入:然后用户最多允许输入 59 个值。

例如

23:59 correct
24:05 incorrect
02:56 correct
02:79 incorrect

我也使用了这个自定义过滤器,但它不起作用

我从 SO 的其他地方获得了这段代码。

代码:

    InputFilter timeFilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
int dstart, int dend) {
if (source.length() == 0) {
return null;// deleting, keep original editing
}
String result = "";
result += dest.toString().substring(0, dstart);
result += source.toString().substring(start, end);
result += dest.toString().substring(dend, dest.length());

if (result.length() > 5) {
return "";// do not allow this edit
}
boolean allowEdit = true;
char c;
if (result.length() > 0) {
c = result.charAt(0);
allowEdit &= (c >= '0' && c <= '2');
}
if (result.length() > 1) {
c = result.charAt(1);
allowEdit &= (c >= '0' && c <= '9');
}
if (result.length() > 2) {
c = result.charAt(2);
allowEdit &= (c == ':');
}
if (result.length() > 3) {
c = result.charAt(3);
allowEdit &= (c >= '0' && c <= '5');
}
if (result.length() > 4) {
c = result.charAt(4);
allowEdit &= (c >= '0' && c <= '9');
}
return allowEdit ? null : "";
}
};

编辑问题:main.xml 文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:orientation="horizontal" >

<TextView
android:id="@+id/txtRecipientName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="20dp"
android:text="@string/recipient_name" />

<EditText
android:id="@+id/edTxtRecipient"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:paddingLeft="20dp" >

<requestFocus />
</EditText>
</LinearLayout>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:orientation="horizontal" >

<TextView
android:id="@+id/txtParcelDeliverTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="20dp"
android:text="@string/delivered_time" />

<EditText
android:id="@+id/edTxtParcelDeliverTime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:paddingLeft="20dp" >
</EditText>
</LinearLayout>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:orientation="horizontal" >

<Button
android:id="@+id/btnRecipient_OK"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="@android:string/ok" />
</LinearLayout>

</LinearLayout>

此代码有效,但如果我插入第一个字母表并插入正确的值,则它不起作用,因为 source 包含其先前的字符值。

最佳答案

尝试将字符转换为整数,然后测试它们是否大于 24 和 60。

int a = ((int) result.charAt(0)) - 48;
int b = ((int) result.charAt(1)) - 48;
int c = ((int) result.charAt(3)) - 48;
if(a < 0 || b < 0 || c < 0) {
Not right.
}

if((a > 2 || (a == 2 && b > 3)) || c > 59) {
Neither is this.
}

负 48,因为数字 0 在 ascii 表中排在第 48 位。 测试必须是 ascii。

关于java - 如何限制android中edittext的输入时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com