This tutorial will show you how to form an ATM Input EditText
Let's see how to do this
Create your xml with a EditText
Now in you activity,
Implement TextWatcher for the EditText you need ATM type input
Another way to achieve Currency EditText
Using third-party library currency_edittext:
How to use:
These lines formats simply your input for default locale
Let's see how to do this
Create your xml with a EditText
<EditText
android:id="@+id/id_edttext_amt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="$0.00"
android:gravity="center"
android:inputType="number"/>
android:id="@+id/id_edttext_amt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="$0.00"
android:gravity="center"
android:inputType="number"/>
Now in you activity,
Implement TextWatcher for the EditText you need ATM type input
private String current = "";
edtAtm.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) {
if(!s.toString().equals(current)){
edtAtm.removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[$,.]", "");
double parsed = Double.parseDouble(cleanString);
String formatted = NumberFormat.getCurrencyInstance().format((parsed/100));
current = formatted;
edtAtm.setText(formatted);
edtAtm.setSelection(formatted.length());
edtAtm.addTextChangedListener(this);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
edtAtm.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) {
if(!s.toString().equals(current)){
edtAtm.removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[$,.]", "");
double parsed = Double.parseDouble(cleanString);
String formatted = NumberFormat.getCurrencyInstance().format((parsed/100));
current = formatted;
edtAtm.setText(formatted);
edtAtm.setSelection(formatted.length());
edtAtm.addTextChangedListener(this);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
To show different currency in EditText - do a trick
Create a xml like
<LinearLayout
android:id="@+id/id_fee_lay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/edittext_style"
android:visibility="gone"
android:layout_marginBottom="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:text="₱"/>
<EditText
android:id="@+id/id_cancel_fee"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:singleLine="true"
android:gravity="top|left"
android:inputType="numberDecimal"
android:background="@android:color/transparent"
android:hint="0.00"/>
</LinearLayout>
Fix the currency symbol in TextView and do the remaining on EditText TextWatcher
Few changes in activity
private String current = "";
if(s.toString().length()>0) {
if (!s.toString().equals(current)) {
edtCanFee.removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[ ,.]", "");
double parsed = Double.parseDouble(cleanString);
String formatted = NumberFormat.getCurrencyInstance().format((parsed/100));
current = formatted;
StringTokenizer tokens = new StringTokenizer(formatted, "$");
String first = tokens.nextToken();
edtCanFee.setText(first);
edtCanFee.setSelection(first.length());
edtCanFee.addTextChangedListener(this);
}
}
The output will be like,
Another way to achieve Currency EditText
Using third-party library currency_edittext:
compile 'com.github.faranjit:currency-edittext:1.0.1'
How to use:
These lines formats simply your input for default locale
<faranjit.currency.edittext.CurrencyEditText
android:id="@+id/edt_currency"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:textColor="@android:color/black" />
For more
________________________________________________________________________________________
Happy Coding...
Comments
Post a Comment