2017-01-15 7 views
0

Ich benutze einen EditText, damit ein Benutzer einen Wert eingeben kann, der in einem Double gespeichert ist.Wie kann man einen EditText als Ganzzahl festlegen, aber eine Dezimaleingabe zulassen?

Double sieht jedoch standardmäßig wie "0.0" aus und es ist ein wenig ärgerlich für einen Benutzer, die Extra Dezimalzahl rückgängig zu machen, wenn es nicht verwendet wird. Gibt es eine Möglichkeit, ganze Zahlen so zu erzwingen, dass sie wie "0" aussehen, und nur die Dezimalzahl anzeigen, wenn der Benutzer sich entscheidet, sie zu verwenden?

Aktueller Code:

 myEditText = (EditText) view.findViewById(R.id.my_edittext); 
     myEditText.setText(myVariable + ""); 
     myEditText.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) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       String temp = s.toString(); 
       if (s.length() > 0){ 
        if (OtherMethods.isDouble(temp)) { 
         myVariable = Double.parseDouble(temp); 
        } 
        else { 
         myVariable = 0.0; 
        } 
       } 
       else { 
        myVariable = 0.0; 
       } 
      } 
     }); 

Die XML:

<EditText 
    android:id="@+id/my_edittext" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="numberDecimal" 
    android:ems="10" 
    android:hint="Input Value" 
    android:imeOptions="actionDone"/> 
+0

Wenn Sie Standardeinstellungen wünschen, dann setzen Sie 'inpuType' auf' text', so dass der Benutzer Felder so einstellen kann, wie er/sie es möchte. –

+0

@NJ Das würde für nicht numerische Werte erlauben – KaliMa

Antwort

1
  1. Parsing Double String, dann String Int:

    String stringparsed = YourDouble + ""; 
    int intparsed = Integer.parseInt(stringparsed); 
    
  2. Teilzeichenfolge Mit der schneiden Zeichenkette von einem startIndex zu fin alIndex:

    String stringparsed = YourDouble + ""; 
    String final = stringparsed.substring(0,1); //for example, if the double was 0.0, the result is 0 
    
1

Um dies zu erreichen Sie NumberFormat

können
EditText yourEditText = (EditText) findViewById(R.id.editTextID); 
    //dummy data, will have user's value 
    double aDouble = 4.0; 

    //formats to show decimal 
    NumberFormat formatter = new DecimalFormat("#0"); 

    //this will show "4" 
    yourEditText.setText(formatter.format(aDouble)); 

Stellen Sie sicher, die Eingabe des Benutzers zu bestätigen. Außerdem wird nur das angezeigt, was angezeigt wird, und nicht der Wert selbst.

+0

Nach dem erneuten Lesen der Frage, meine Lösung wird nur funktionieren, wenn Sie den Wert anzeigen, nachdem der Benutzer es eingegeben hat, und die Formatierung des Werts nicht wirklich zulassen, wie es eingegeben wird. –

+0

Ich habe dem ursprünglichen Beitrag Code hinzugefügt. Problem mit Ihrem Ansatz ist, dass selbst wenn die Zahl einen Dezimalanteil hat, wird es als int angezeigt – KaliMa

Verwandte Themen