Articles of textwatcher

如何在Android App中使用AsYouTypeFormatter TextWatcher?

我正在尝试使用来自Google的libphonenumber的AsYouTypeFormatter和TextWatcher,我不确定它是否可行。 我已经能够将文本格式化为从EditText字段输入并将其输出到另一个EditText但不能直接更改原始的EditText字段(这就是我想要的)。 我知道phoneNumberFormattingTextWatcher,但我们希望用户能够最终选择他们所在的区域设置,并且比使用允许的区域更多(从我收集的内容)。 顶级: private View phoneNumberView; private EditText phoneNumberText; private String formattedPhoneNumber; private boolean isInAfterTextChanged; private AsYouTypeFormatter aytf; 首先,我在我的类顶部初始化AsYouTypeFormatter: aytf = PhoneNumberUtil.getInstance().getAsYouTypeFormatter(Locale.getDefault().getCountry()); 在创建了我的标签之后,我创建一个EditText框,格式化其中的现有电话号码(可以工作),并附加监听器(这是当前的类): phoneNumberView = inflater.inflate(R.layout.phone_number_setting, null); phoneNumberText = (EditText) phoneNumberView.findViewById(R.id.dirty_phone_number); phoneNumberText.setText(dirtyPhoneNumber); for (int i = 0; i < dirtyPhoneNumber.length(); i++){ phoneNumberText.setText(aytf.inputDigit(dirtyPhoneNumber.charAt(i))); } aytf.clear(); phoneNumberText.setText(dirtyPhoneNumber); phoneNumberText.addTextChangedListener(this); 那么这就是我目前在TextWatcher函数中所拥有的,我不知道我的代码应该包含哪些函数: @Override public void afterTextChanged(Editable s) { if […]

为EditText实现Text Watcher

我有一个EditText。 当我点击它时,它变得可以聚焦。 我将输入要输入EditText的输入文本。 我想为EditText实现一个监听器,这样当我停止输入时,它应该自动将该文本保存到数据库中而不是一个按钮。 如何让EditText的监听器听取是否停止输入?

android EditText,键盘textWatcher问题

我正在开发一个Android应用程序,我有一个EditText,用户可以在其中输入数字。 我想使用不同的货币格式(比如##,##,###)格式化数字,我想在运行中进行,即当用户输入每个数字时(而不是按下输入时)。 我google了一下,遇到了TextWatcher ,我首先发现它很有希望,但结果却是一种绝对的痛苦。 我正在HTC Desire手机上调试我的代码,它只有一个软键盘。 现在我想在用户按下数字(0到9),del(退格)键并输入密钥时收到回调。 从我的测试中我发现了这些(至少在我的手机上) 1)当用户按del或输入键时,将调用editText onKeyListener。 当用户按下回车键时,一次输入会调用onKey函数两次(我认为是ACTION_UP和ACTION_DOWN)。 当用户按下del时,onKey被调用一次(仅适用于ACTION_DOWN),我不知道为什么。 用户按下任何数字(0到9)时都不会调用onKey,我也无法理解。 2)每当用户按任意数字(0到9)键时,都会调用TextWatchers 3个回调函数(beforeTextChanged,onTextChanged,afterTextChanged)。 所以我想通过一起使用TextWatcher和onKeyListener,我可以得到我需要的所有回调。 现在我的问题是这些.. 1)首先在我的HTC软键盘中有一个键(带有向下箭头的键盘符号),当我点击它时,键盘被重新签名而不给出任何回调。 我仍然不能相信Android允许用户编辑字段并辞职而不让程序处理(保存)编辑。 现在我的editText显示一个值,我的对象有另一个值(我在输入时保存用户编辑,并通过使用对象中的值重置editText值来处理键盘上的按键,但我没有回答此键盘向下键) 。 2)其次,我想在用户输入新数字后格式化数字。 假设我在editText上已有123并且用户输入了按4,我希望我的editText显示1,234。 我在onTextChanged()和afterTextChanged()上获得完整数字,我可以格式化数字并将其放回到任何这些回调中的editText。 我应该使用哪一个? 哪种是最佳做法? 3)第三个是最关键的问题。 当应用程序启动时,我将当前对象值放在editText中。 假设我把123放在onResume()上,当用户输入一个数字(比如说4)时我希望它是1234.但是在我的onTextChanged回调中我得到的是4123.当我再按一个键(比如5)我是得到45123.因此对于用户输入,editText光标指向文本的结尾。 但是当手动设置值时,editText光标似乎不会更新。 我相信我必须在textWatcher回调中做一些事情,但我不知道该怎么办。 我在下面发布我的代码。 public class AppHome extends AppBaseActivity { private EditText ed = null; private NumberFormat amountFormatter = null; private boolean isUserInput = true; @Override public […]

Android – 在EditText中更改*文本后执行某些操作*

我构建了一个Android应用程序。 我有一个EditText。 我想在用户更改文本后自动保存更改(或其他任何内容)。 现在我用 editText.addTextChangedListener(textWatcher); 和 TextWatcher textWatcher = new TextWatcher() { public void afterTextChanged(Editable s) { … } 但是它会在每次微小的更改后保存更改(添加\删除一个字母),我希望它只在用户完成后才能保存(关闭键盘,点击不同的编辑文本等)。 我怎样才能做到这一点?

如何在EditText上应用Textchange事件

我开发了一个简单的应用程序,如减法,添加。 在这个应用程序中,我使用三个EditTexts,一个用于回答,另外两个用于提问。 我想计算文本更改事件的问题答案。 但是当我在这两个上应用文本更改事件时,事件发生但不正常工作。 因为当我在问题的第一个EditText中输入文本时事件发生但它抛出此exception: 07-03 16:39:48.844: E/EduApp Log :=>(12537): Error In Text change Event java.lang.NumberFormatException: unable to parse ” as integer 我该怎么办? 我使用TextWatcher进行文本更改事件。 txtOne.addTextChangedListener(this); txtTwo.addTextChangedListener(this); public void afterTextChanged(Editable s) {} public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public void onTextChanged(CharSequence s, int start, int before, int count) {}

实现相同接口的接口内的内部类,我们通过这个实现了什么?

我的问题: 我正在查看TextWatcher的源代码,我没有在这里得到这个概念。 扩展到NoCopySpan有什么意义? TextWatcher.java: public interface TextWatcher extends NoCopySpan { public void beforeTextChanged(CharSequence s, int start, int count, int after); public void onTextChanged(CharSequence s, int start, int before, int count); public void afterTextChanged(Editable s); } NoCopySpan.java: package android.text; /** * This interface should be added to a span object that should not be copied into […]

TextWatcher的onTextChanged,beforeTextChanged和afterTextChanged之间的差异

在我的Android项目中,我不得不将TextChangedListener (TextWatcher)添加到编辑文本视图中。 其中有三个部分。 onTextChanged beforeTextChanged afterTextChanged 这三者有什么不同。 我不得不在关键的lisner上实现一个表的搜索,对于我的情况,这三个看起来都是一样的。 他们也运作相同。 当我输入产品名称的一部分时,表格会重新绘制,只包含那些包含输入文本的产品。 但我使用了afterTextChanged部分。 我的代码是 EditProduct.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub // System.out.println(“onTextChanged”+s); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub // System.out.println(“beforeTextChanged”+s); } […]

TextWatcher事件被多次触发

我对TextWatcher有一个恼人的问题。 我一直在网上搜索,但找不到任何东西。 感谢有人可以帮助我。 由于某种原因, 在一次文本更改时对TextWatcher事件的调用是不稳定的。 有时它们会被触发一次(就像它们应该的那样),有时是两次,有时是3次。 不知道为什么,整件事情非常直截了当。 有时候,afterTextChanged()上的Editable参数会返回toString()和length()中的空值。 代码如下: private TextWatcher mSearchAddressTextChangeListener = 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 searchedAddress) { System.out.println(“called multiple times.”); } }; 在afterTextChanged() (和AsyncTask […]

在Android中使用千位分隔符(,)键入时如何格式化EditText的input?

我有一个edittext ,它只能得到没有十进制数字的数字。 android:inputType="number" 我打字的时候要分开数千个。 例如25,000。 我知道我应该使用TextWatcher ,我已经使用这个代码,但我不能让它工作: @Override public void afterTextChanged(Editable viewss) { String s = null; try { // The comma in the format specifier does the trick s = String.format("%,d", Long.parseLong(viewss.toString())); } catch (NumberFormatException e) { } } 你能帮我这么做吗?

使用TextWatcher进行EditTextvalidation

我有一个EditText和一个button的对话框。 这个EditText将命名我将创build的数据库表,所以它的validation是至关重要的。 所以我想提出两个问题: 1)这很简单,但我无法在任何地方find它:数据库表名可以接受哪些字符? 它可以接受数字吗? 而且可以成为第一个字符吗? 2)我设法使用TextWtachervalidationEditText 。 代码如下: et_name.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { String filtered_str = s.toString(); if (filtered_str.matches(".*[^az^0-9].*")) { filtered_str = filtered_str.replaceAll("[^az^0-9]", ""); s.clear(); // s.insert(0, filtered_str); Toast.makeText(context, "Only lowercase letters and numbers are allowed!", Toast.LENGTH_SHORT).show(); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public […]