如何在Xamarin/Android应用中验证字段

4

有人知道如何在Xamarin/Android应用程序中使字段必填吗?

我在我的Android布局中有这个字段和按钮,我想确保在进入下一个活动之前输入信息。

<TextView
    android:text="Zip Code:"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/zipCodeLabel"
    android:textColor="#000000"
    android:textSize="20sp" />
<Button
    android:id="@+id/btnSearch"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/btnSearch"
    android:textSize="30sp" />

我在iOS上找到了这个内容,但是在Android上找不到类似的东西:https://developer.xamarin.com/recipes/ios/standard_controls/text_field/validate_input/

1个回答

6

根据用户体验需求,有多种验证输入的方法。

android:digits 限制输入:

<EditText
    android:id="@+id/zipCodeEntry"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="1234567890-"
/>

输入完成后验证并显示错误信息:

button.Click += delegate { 
if (!ValidateZipCode(zipCodeEntry.Text))
{
    zipCodeEntry.Error = "Enter Valid USA Zip Code";
    return;
}
DoSubmit();

protected bool ValidateZipCode(string zipCode)
{
    string pattern = @"^\d{5}(\-\d{4})?$";
    var regex = new Regex(pattern);
    Log.Debug("V", regex.IsMatch(zipCode).ToString());
    return regex.IsMatch(zipCode);
}

在你的Activity上实现View.IOnKeyListener,并检查/验证每个按键输入

enter image description here

zipCodeEntry.SetFilters(new IInputFilter[] { this });


public bool OnKey(View view, [GeneratedEnum] Keycode keyCode, KeyEvent e)
{
    if (view.Id == Resource.Id.zipCodeEntry)
    {
        Log.Debug("V", keyCode.ToString()); // Validate key by key
    }
    return false;
}

使用InputFilter(在您的活动上实现IInputFilter):

public ICharSequence FilterFormatted(ICharSequence source, int start, int end, ISpanned dest, int dstart, int dend)
{
    StringBuilder sb = new StringBuilder();
    for (int i = start; i < end; i++)
    {
        if ((Character.IsDigit(source.CharAt(i)) || source.CharAt(i) == '-'))
            sb.Append(source.CharAt(i));
    }
    return (sb.Length() == (end - start)) ? null : new Java.Lang.String(sb.ToString());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接