1
我嘗試在EditText中設置逗號格式。當我嘗試從1-9進入時,它非常完美。但是如果EditText有一些文本並且遊標不在最後,並且我嘗試輸入1-9,它不會以1-9的順序,光標會放置錯誤的位置。文本應該是「91,234,567,899」Android EditText光標錯誤位置
查看圖像波紋管。
如何解決?
這是Android的計算器是如何工作的:
下面是我的代碼:
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 "";
}
}
Emmm,它的工作原理。但如果嘗試輸入1-9時EditText爲空將粉碎。爲什麼? –
謝謝@Ajeet Choudhary – JavaNoob
@霍春倫什麼是例外? – JavaNoob