【发布时间】:2016-07-09 09:16:56
【问题描述】:
我正在开发一个使用 Xamarin 和 MvvmCross 的 Android 应用程序。
我有一个这样定义的EditText:
<EditText
local:MvxBind="Text PorcentagemDesconto"
android:inputType="number|numberDecimal"
android:nextFocusDown="@+id/valorDesconto"
android:layout_width="1dp"
android:layout_weight="0.3"
android:layout_height="wrap_content"
android:hint="%"
android:focusableInTouchMode="true" />
当我点击EditText 时,键盘没有让我选择插入逗号,只有一个点 用作小数分隔符。这里的问题是,例如当我插入数字 2.22 时,Binding 假定该值为 222,因为我的设备使用的是 pt-BR 语言环境,使用逗号表示小数,点表示千位。
我已经做了以下解决问题:
创建了一个ValueConverter 替换逗号的点
public class DecimalValueConverter : MvxValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
public override object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var strValue = value?.ToString();
if (string.IsNullOrEmpty(strValue))
return null;
strValue = strValue.Replace(".", ",");
return strValue;
}
}
但是这样,一旦用户输入第一个十进制数字,光标就会移动到EditText的开头,所以,我还使用EditText的TextChanged事件将选择设置为on输入结束来解决这个问题。
var porcentagemDesconto = v.FindViewById<EditText>(Resource.Id.porcentagemDesconto);
porcentagemDesconto.TextChanged += (s, e) =>
{
Activity.RunOnUiThread(() =>
{
if (porcentagemDesconto.Text != null)
{
porcentagemDesconto.SetSelection(porcentagemDesconto.Text.Length);
}
});
};
但老实说,我不喜欢这种解决方案。我需要为我所有接受小数的EditTexts 编写事件代码,或者创建一个自定义视图来执行此操作。
我很难相信我需要创建一个 自定义视图 和一个 ValueConverter 只是为了使用逗号作为小数分隔符,所以,我想知道是否有更好的解决我的问题的方法。
编辑:
我也已经尝试过使用android:digits="0123456789,-",但这样逗号不会出现在键盘上,只会出现在点上。唯一的区别是这样,当我单击点时,什么也没有发生。
【问题讨论】: