2017-01-15 8 views
0

私はEditTextを使用して、ユーザーがDoubleに格納されている値を入力できるようにしています。EditTextを整数にデフォルト設定するが、10進数入力を許可する方法は?

デフォルトでは、Doublesは「0.0」のように見えますが、使用されていない場合は余分な小数点をバックスペースするのはちょっと面倒です。整数を強制的に「0」のように表示し、ユーザーが実際に使用することを決定した場合にのみ小数点を表示する方法はありますか?

現在のコード:

 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; 
       } 
      } 
     }); 

XML:Stringに

<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

デフォルトの場合は 'inpuType'を' text'に設定して、ユーザーが望むようにフィールドを設定できるようにします。 –

+0

@NJそれは数字以外の値を許容するでしょう – KaliMa

答えて

1
  1. 解析ダブル、[文字列をint型に:

    カットする部分文字列を使用し
    String stringparsed = YourDouble + ""; 
    int intparsed = Integer.parseInt(stringparsed); 
    
  2. startIndexからfinまでの文字列alIndex:

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

あなたはNumberFormat

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)); 

は、ユーザーの入力を検証することを確認し使用することができ、これを達成するために。また、これは表示されるものだけを変更し、値自体は変更しません。

+0

質問を読み返すと、私の解決策は、ユーザーが入力した後に値を表示していて、実際に入力時に値の書式設定を許可しない場合にのみ機能します。 –

+0

元の投稿にいくつかのコードを追加しました。あなたのアプローチの問題は、数値に小数部分があっても、intとして表示されることです – KaliMa

関連する問題