当 edittext 的默认文本为浮点值时,编辑文本光标重置为左侧
Edit text cursor resets to left when default text of edittext is a float value
我正在使用绑定适配器来防止 2 种方式绑定的 edittexts 的持续文本更新。
@BindingAdapter("binding")
public static void bindEditText(EditText editText, final String str) {
if ((!editText.getText().toString().equals(str)) && !editText.getText().equals("")) {
editText.setText(str);
}
}
它适用于使用整数默认文本的编辑文本。但是当涉及到使用浮动默认文本编辑文本时。例如:70.0,当我输入第一个数字时,编辑文本会刷新并变为 Ex:8.0。然后光标向左移动,后面的所有数字将被添加到前面。例如:198.0
试过这个,但没用。
@BindingAdapter("binding")
public static void bindEditText(EditText editText, final String str) {
if ((!(editText.getText().toString()+".0").equals(str)) && !editText.getText().equals("")) {
editText.setText(str);
}
}
有什么解决办法吗?
我不确定每个人都知道:Android数据绑定现在支持双向绑定。您需要 Android Studio 2.1,然后您可以使用额外的“=”字符将您的字段绑定为双向:
<EditText android:text="@={user.name}" .../>
您不需要任何额外的绑定适配器。
https://halfthought.wordpress.com/2016/03/23/2-way-data-binding-on-android/
就是说,您要将浮点数分配给字符串字段。使用 Android Studio 2.2 gradle 插件,您将能够为此使用快捷方式,允许使用原始转换进行双向绑定:
<EditText android:text="@={`` + data.floatNumber}" .../>
但是使用 Android Studio 2.1,您必须自己对绑定适配器进行转换。这个允许用户编辑字段并且只接受有效的浮点数:
@BindingAdapter("android:text")
public static void setText(TextView view, float value) {
boolean setValue = view.getText().length() == 0;
try {
if (!setValue) {
setValue = Float.parseFloat(view.getText().toString()) != value;
}
} catch (NumberFormatException e) {
}
if (setValue) {
view.setText(String.valueOf(value));
}
}
@InverseBindingAdapter(attribute = "android:text")
public static float getText(TextView view) {
try {
return Float.parseFloat(view.getText().toString());
} catch (NumberFormatException e) {
return 0;
}
}
我正在使用绑定适配器来防止 2 种方式绑定的 edittexts 的持续文本更新。
@BindingAdapter("binding")
public static void bindEditText(EditText editText, final String str) {
if ((!editText.getText().toString().equals(str)) && !editText.getText().equals("")) {
editText.setText(str);
}
}
它适用于使用整数默认文本的编辑文本。但是当涉及到使用浮动默认文本编辑文本时。例如:70.0,当我输入第一个数字时,编辑文本会刷新并变为 Ex:8.0。然后光标向左移动,后面的所有数字将被添加到前面。例如:198.0
试过这个,但没用。
@BindingAdapter("binding")
public static void bindEditText(EditText editText, final String str) {
if ((!(editText.getText().toString()+".0").equals(str)) && !editText.getText().equals("")) {
editText.setText(str);
}
}
有什么解决办法吗?
我不确定每个人都知道:Android数据绑定现在支持双向绑定。您需要 Android Studio 2.1,然后您可以使用额外的“=”字符将您的字段绑定为双向:
<EditText android:text="@={user.name}" .../>
您不需要任何额外的绑定适配器。
https://halfthought.wordpress.com/2016/03/23/2-way-data-binding-on-android/
就是说,您要将浮点数分配给字符串字段。使用 Android Studio 2.2 gradle 插件,您将能够为此使用快捷方式,允许使用原始转换进行双向绑定:
<EditText android:text="@={`` + data.floatNumber}" .../>
但是使用 Android Studio 2.1,您必须自己对绑定适配器进行转换。这个允许用户编辑字段并且只接受有效的浮点数:
@BindingAdapter("android:text")
public static void setText(TextView view, float value) {
boolean setValue = view.getText().length() == 0;
try {
if (!setValue) {
setValue = Float.parseFloat(view.getText().toString()) != value;
}
} catch (NumberFormatException e) {
}
if (setValue) {
view.setText(String.valueOf(value));
}
}
@InverseBindingAdapter(attribute = "android:text")
public static float getText(TextView view) {
try {
return Float.parseFloat(view.getText().toString());
} catch (NumberFormatException e) {
return 0;
}
}