Ich versuche, Komma-Format in EditText festzulegen. Es funktioniert perfekt, wenn ich versuche, von 1-9 einzugeben. Aber wenn der EditText etwas Text hat und der Cursor nicht am Ende ist, und ich versuche, 1-9 einzugeben, wird es nicht in der Reihenfolge 1-9, der Cursor wird falsche Position platzieren. Der Text sollte "91,234,567,899"Android EditText Cursor falsche Position
sein Siehe die Bilder unten.
Wie es zu beheben?
Dies ist, wie Android-Rechner gearbeitet:
Unten ist mein Code:
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.user.test.MainActivity">
<EditText
android:id="@+id/et_number"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#fff"
android:imeOptions="actionDone"
android:inputType="numberDecimal"
android:maxLines="1"
android:maxLength="30"
android:textColor="#000"
android:textSize="17sp"
android:textStyle="bold"
android:singleLine="true"
android:paddingLeft="20dp"
android:digits=".,"/>
</LinearLayout>
2.MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText editText = (EditText) findViewById(R.id.et_number);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String value = s.toString();
editText.removeTextChangedListener(this);
s.replace(0, value.length(), getDecimalFormattedString(value));
editText.addTextChangedListener(this);
}
});
}
String history;
public String getDecimalFormattedString(String value) {
try {
value = value.replaceAll("," , "");
int dot_amt = 0;
for (int i = 0; i < value.length(); i++){
if ('.' == value.charAt(i)){
dot_amt++;
}
}
if (dot_amt > 1){
return history;
}else {
String str1 = value;
String str2 = "";
if (value.contains(".")){
str1 = value.substring(0, value.indexOf("."));
if ("".equals(str1)){
str1 = "0";
}
str2 = value.substring(value.indexOf("."), value.length());
if (str2.length() > 2){
str2 = str2.substring(0, 3);
}
}
str1 = String.valueOf(Long.parseLong(str1));
String str3 = "";
int i = 0;
for (int k = str1.length()-1; k >= 0 ; k--) {
if (i == 3) {
str3 = "," + str3;
i = 0;
}
str3 = str1.charAt(k) + str3;
i++;
}
history = str3+str2;
}
return history;
}catch (Exception e){
e.printStackTrace();
}
return "";
}
}
Emm, es funktioniert. Aber wenn Sie versuchen, 1-9 einzugeben, wenn EditText leer ist, wird es zerquetscht. Warum? –
Danke @Ajeet Choudhary – JavaNoob
@HuoChhunleng Was war die Ausnahme? – JavaNoob