如何在 EditText 中自动添加千位分隔符?
Posted
技术标签:
【中文标题】如何在 EditText 中自动添加千位分隔符?【英文标题】:How to automatically add thousand separators in EditText? 【发布时间】:2016-04-06 01:01:10 【问题描述】:当用户使用this 主题中的最后一个解决方案键入时,我想在 EditText 中自动添加千位分隔符。
我已经按照描述创建了一个单独的 java 文件作为一个类并粘贴了给定的代码。但我不知道如何修改我的活动代码以达到预期的效果。
这是我的 XML 代码:
<EditText
android:layout_
android:layout_
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();
);
任何帮助将不胜感激。
【问题讨论】:
可能有用:***.com/a/5323787/2911458 @stkent :猜猜它仅用于更改格式作为结果字符串。不是实时更改.. 【参考方案1】:首先,你的 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 中的位置发生变化。检查它并更新我也请:)
暂时移除 TextWatcher 的原因是如果 watcher 留在 EditText 上,在调用 editText.setText(s)
时会再次调用它,并创建一个循环,导致 *** 异常。
【讨论】:
谢谢您,先生!我按照你说的做了,第三个数字被逗号分开,但有问题..首先:数字以相反的格式输入。因此 123 结果为 321。 第二:输入第 5 个数字后,edittext 将重置。您是否考虑过我提到的单独的 java 类? @新浪Rezaei 无论如何我从你的回答中得到了一个线索,并设法自己使用了这个课程。非常感谢亲爱的朋友 :) 如果答案对你有帮助,你应该接受答案以上是关于如何在 EditText 中自动添加千位分隔符?的主要内容,如果未能解决你的问题,请参考以下文章