EditText zeigt Zahlen mit 2 Dezimalstellen zu allen Zeiten

Ich möchte die Eingabe der EditText-Felder jederzeit mit zwei Dezimalstellen anzeigen. Also, wenn der Benutzer 5 eingibt, wird es 5.00 zeigen oder wenn der Benutzer 7.5 eingibt, wird es 7.50 zeigen.

Außerdem möchte ich auch null zeigen, wenn das Feld anstelle von nichts leer ist.

  • Wie integriere ich ZXing api mit Frontkamera in Android?
  • Android studio 0.4.2 + gradle + Android Quellcode
  • Erste Schritte mit einer VOIP App für iOS oder Android?
  • IOException: "Empfangene Authentifizierungsherausforderung ist null" (Apache Harmony / Android)
  • Fehler beim Installieren von apk auf dem Gerät 'emulator-5554': timeout
  • Ersetzen Sie das Symbolleistenlayout entsprechend dem angezeigten Fragment
  • Was ich schon habe ist der eingegebene Typ:

    android:inputType="number|numberDecimal"/> 

    Soll ich hier mit Eingabefiltern arbeiten?

    Tut mir leid, ich bin noch ganz neu in Android / Java …

    Danke für Ihre Hilfe!

    Edit 2011-07-09 23.35 – Gelöstes Teil 1 von 2: Das "" bis 0,00.

    Mit der Antwort von nickfox konnte ich die Hälfte meiner Frage lösen.

      et.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) { if(s.toString().matches("")) { et.setText("0.00"); Selection.setSelection(et.getText(), 0, 4); } } }); 

    Ich arbeite immer noch an einer Lösung für die andere Hälfte meiner Frage. Wenn ich die Lösung gefunden habe, werde ich es auch hier posten.

    Bearbeiten 2011-07-09 23.35 – Gelöstes Teil 2 von 2: Benutzereingaben in eine Zahl mit zwei Dezimalstellen ändern.

     OnFocusChangeListener FocusChanged = new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(!hasFocus){ String userInput = et.getText().toString(); int dotPos = -1; for (int i = 0; i < userInput.length(); i++) { char c = userInput.charAt(i); if (c == '.') { dotPos = i; } } if (dotPos == -1){ et.setText(userInput + ".00"); } else { if ( userInput.length() - dotPos == 1 ) { et.setText(userInput + "00"); } else if ( userInput.length() - dotPos == 2 ) { et.setText(userInput + "0"); } } } } 

  • Android Lint: ignorieren Bibliotheksprojekte
  • Erben von Theme.AppCompat *
  • Wo finde ich die Standard-AlertDialog-Layout-XML-Datei?
  • Warum ist meine Seite nicht in der richtigen Größe auf einem Android auch mit Viewport / Media-Abfragen?
  • Wie Software Based Card Emulation (HCE) garantiert NFC Security?
  • Was ist der beste Weg, um Smali zu lernen (und wie / wann soll ich Dalvik VM opcodes verwenden)?
  • 3 Solutions collect form web for “EditText zeigt Zahlen mit 2 Dezimalstellen zu allen Zeiten”

    Hier ist etwas, was ich für den Dollar-Input verwenden. Es sorgt dafür, dass es nur noch zwei Stellen hinter dem Dezimalpunkt gibt. Sie sollten in der Lage sein, es an Ihre Bedürfnisse anzupassen, indem Sie das $ -Zeichen entfernen.

      amountEditText.setRawInputType(Configuration.KEYBOARD_12KEY); amountEditText.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) { if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$")) { String userInput= ""+s.toString().replaceAll("[^\\d]", ""); StringBuilder cashAmountBuilder = new StringBuilder(userInput); while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') { cashAmountBuilder.deleteCharAt(0); } while (cashAmountBuilder.length() < 3) { cashAmountBuilder.insert(0, '0'); } cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.'); cashAmountBuilder.insert(0, '$'); amountEditText.setText(cashAmountBuilder.toString()); // keeps the cursor always to the right Selection.setSelection(amountEditText.getText(), cashAmountBuilder.toString().length()); } } }); 

    Update # 2

    Korrigieren Sie mich, wenn ich mich irre, aber offizielle Dokumente zu TextWatcher sagen, dass es legitime Verwendung afterTextChanged Methode für Änderungen an … EditText Inhalt für diese Aufgabe.

    Ich habe die gleiche Aufgabe in meiner mehrsprachigen App und wie ich weiß, ist es möglich , oder . Symbole als Trennzeichen so ändere ich nickfox Antwort für das 0.00 Format mit der Gesamtgrenze der Symbole auf 10:

    Layout (aktualisiert):

     <com.custom.EditTextAlwaysLast android:id="@+id/et" android:layout_height="wrap_content" android:layout_width="fill_parent" android:maxLength="10" android:layout_marginTop="50dp" android:inputType="numberDecimal" android:gravity="right"/> 

    EditTextAlwaysLast Klasse:

     import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.widget.EditText; /** * Created by Drew on 16-01-2015. */ public class EditTextAlwaysLast extends EditText { public EditTextAlwaysLast(Context context) { super(context); } public EditTextAlwaysLast(Context context, AttributeSet attrs) { super(context, attrs); } public EditTextAlwaysLast(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onSelectionChanged(int selStart, int selEnd) { //if just tap - cursor to the end of row, if long press - selection menu if (selStart==selEnd) setSelection(getText().length()); super.onSelectionChanged(selStart, selEnd); } } 

    Code in ocCreate-Methode (Update # 2):

     EditTextAlwaysLast amountEditText; Pattern regex; Pattern regexPaste; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); amountEditText = (EditTextAlwaysLast)findViewById(R.id.et); DecimalFormatSymbols dfs = new DecimalFormatSymbols(getResources().getConfiguration().locale); final char separator = dfs.getDecimalSeparator(); //pattern for simple input regex = Pattern.compile("^(\\d{1,7}["+ separator+"]\\d{2}){1}$"); //pattern for inserted text, like 005 in buffer inserted to 0,05 at position of first zero => 5,05 as a result regexPaste = Pattern.compile("^([0]+\\d{1,6}["+separator+"]\\d{2})$"); if (amountEditText.getText().toString().equals("")) amountEditText.setText("0"+ separator + "00"); amountEditText.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { if (!s.toString().matches(regex.toString())||s.toString().matches(regexPaste.toString())){ //Unformatted string without any not-decimal symbols String coins = s.toString().replaceAll("[^\\d]",""); StringBuilder builder = new StringBuilder(coins); //Example: 0006 while (builder.length()>3 && builder.charAt(0)=='0') //Result: 006 builder.deleteCharAt(0); //Example: 06 while (builder.length()<3) //Result: 006 builder.insert(0,'0'); //Final result: 0,06 or 0.06 builder.insert(builder.length()-2,separator); amountEditText.setText(builder.toString()); } amountEditText.setSelection(amountEditText.getText().length()); } public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public void onTextChanged(CharSequence s, int start, int before, int count) { } }); } 

    Es sieht aus wie das beste Ergebnis für mich. Jetzt unterstützt dieser Code Kopiervorlagen

    Nur einige kleinere Änderungen an den Lösungen, die Patrick gepostet hat. Ich habe alles im onFocusChangedListener implementiert. Achten Sie auch darauf, den EditText-Eingabetyp auf "number | numberDecimal" zu setzen.

    Änderungen sind: Wenn die Eingabe leer ist, dann mit "0.00" ersetzen. Wenn die Eingabe mehr als zwei Dezimalstellen der Präzision hat, dann auf zwei Dezimalstellen abfallen. Etwas kleinere Refactoring.

     editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { String userInput = ET.getText().toString(); if (TextUtils.isEmpty(userInput)) { userInput = "0.00"; } else { float floatValue = Float.parseFloat(userInput); userInput = String.format("%.2f",floatValue); } editText.setText(userInput); } } }); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.