I searched every question similar to my problem but didn't get it working. My problem is this:
I want to format a string in EditText
while typing. The format is this (it's always a 19 digit number):
012345 01 0123456789 0
As you can see I want to add spaces when they are needed while the user is typing. I know that I have to use the TextWatcher
but everything I do I don't get what i want.
Edit:
Here is the code of my last try:
@Override
public void afterTextChanged(Editable s) {
if(s.length() == 7 || s.length() == 10 || s.length() == 21){
editText.removeTextChangedListener(this);
String newValue;
newValue= s.insert((s.length()-1), " ").toString();
//Log.d("AFTER",newValue);
editText.setText(newValue);
editText.setSelection(newValue.length());
editText.addTextChangedListener(this);
}
}
Here you go with it.
main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="0123456789"
android:inputType="number" />
</LinearLayout>
MainActivity.java:
public class MainActivity extends Activity {
int textlength = 0;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher()
{
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)
{
String text = editText.getText().toString();
textlength = editText.getText().length();
if(text.endsWith(" "))
return;
if(textlength == 7 || textlength == 10 || textlength == 21)
{
editText.setText(new StringBuilder(text).insert(text.length()-1, " ").toString());
editText.setSelection(editText.getText().length());
}
}});
}
}
In this way, I have just managed to add spaces between the digits at particular intervals.
Note: I have added extra features to the edittext, so that only numbers can be entered and at the same time the number keyboard only pops up by default. For more on the way for the type of user inputs, this might help you.