EditText 自動保留兩位小數

package com.example.astart;java

import java.text.DecimalFormat;android

import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;app

public class MyUtils {
    /**
     * 格式化小數
     * @param context
     * @param paEditTexts
     * @param limit 保留小數位數
     */
    public static void setEditTextAccuracys(final Context context,final int limit,EditText...paEditTexts){
        if(paEditTexts == null) return;
        for (int i = 0; i < paEditTexts.length; i++) {
            setEditTextAccuracy(context,paEditTexts[i],limit);
        }
    }
    
    /**
     * 格式化小數
     * @param context
     * @param editText
     * @param limit 0 不限制小數位數
     */
    private static void setEditTextAccuracy(final Context context,final EditText editText, final int limit) {
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if(limit != 0){
                    /**
                     * 限制輸入金額最多爲 limit 位小數
                     */
                    if (s.toString().contains(".")) {
                        if (s.length() - 1 - s.toString().indexOf(".") > limit) {
                            s = s.toString().subSequence(0,
                                    s.toString().indexOf(".") + limit + 1);
                            editText.setText(s);
                            editText.setSelection(s.length());
                        }
                    }
                }
                /**
                 * 第一位輸入小數點的話自動變換爲 0.
                 */
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    editText.setText(s);
                    editText.setSelection(2);
                }ide

                /**
                 * 避免重複輸入小數點前的0 ,沒有意義
                 */
                if (s.toString().startsWith("0")
                        && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        editText.setText(s.subSequence(0, 1));
                        editText.setSelection(1);
                        return;
                    }
                }
                
            }this

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {.net

            }
            
            @Override
            public void afterTextChanged(Editable edit) {
            }
        });
        
        if(limit != 0){
            editText.setOnFocusChangeListener(new OnFocusChangeListener() {
                
                @Override
                public void onFocusChange(View view, boolean hasFocus) {
                    if(!hasFocus){
                        if(!editText.getText().toString().isEmpty()){
                            try {
                                double value = Double.parseDouble(editText.getText().toString());
                                DecimalFormat format = new DecimalFormat("0.00");
                                editText.setText(format.format(value));
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            });
        }
        
    }
}
 orm

 

使用ci

 

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;get

public class MainActivity extends Activity {
private EditText monkey;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        monkey=(EditText) findViewById(R.id.et_monkey);
        MyUtils.setEditTextAccuracys(this, 2, monkey);string

    //上下文,最多保留幾位小數,EditText控件名
    }

}

相關文章
相關標籤/搜索