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 zeichne mit einem Standard-Android-Schriftart auf einem Canvas?
  • Wie kann ich den Chunked Streaming-Modus für HTTP-Verbindungen in Android explizit deaktivieren?
  • Wie interagiere ich mit Google Docs von Android?
  • Android Studio: Kann den Daemon-Prozess nicht starten
  • Wie kann ich eine Menüinstanz programmgesteuert erstellen? Dh ein Menü draußen auf OnCreateOptionsMenu aufblasen
  • Problem beim Importieren von Android-Projektarchiven in Eclipse
  • 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"); } } } } 

  • Wie führen Sie Klick-Operation auf Marker benutzerdefinierte Info-Fenster auf Google Map V2 in Android
  • Android und Einstellung Breite und Höhe programmgesteuert in dp Einheiten
  • Wie bekomme ich beide IMEI-Nummern von Dual-SIM-Handy?
  • Ist es möglich, ein Array oder ein Objekt zu SharedPreferences auf Android hinzuzufügen
  • GoogleAuthException beim Erhalten eines Zugriffstokens mit ClientID
  • Warum können wir keine Translucent System Bars mit und ActionBar 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.