我希望使用this主题中的最后一个解决方案在用户类型中自动在EditText中添加千位分隔符。
我已经根据描述创建了一个单独的java文件并粘贴了给定的代码。但我不知道如何修改我的活动代码以达到预期的效果。
这是我的XML代码:
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:id="@+id/editText"
android:layout_weight="1"/>
和我的相关活动如下:
public class CostofHearingActivity extends AppCompatActivity {
public void calculate(View view){
// some calculations
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_costof_hearing);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}
任何帮助将不胜感激。
答案 0 :(得分:0)
所有的拳头,您的活动类中EditText的引用在哪里?
其次,正如您提到的链接所示,您必须在edittext中添加文本观察器并重置用户的输入文本。
您可以在活动中使用以下代码:
private EditText editText;
private final TextWatcher watcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable view) {
String s = null;
try {
s = String.format("%,d", Long.parseLong(view.toString()));
} catch (NumberFormatException e) {
}
editText.removeTextChangedListener(watcher);
editText.setText(s);
editText.addTextChangedListener(watcher);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_costof_hearing);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
...
editText = (EditText) findViewById(R.id.editText);
editText .addTextChangedListener(watcher);
}
我没有自己检查它可能会导致更改EditText中光标的位置。检查并更新我plz:)
暂时删除TextWatcher的原因是,如果观察者仍在EditText上,则在调用editText.setText(s)
时会再次调用它,并创建一个导致StackOverflow异常的循环。