lyd19911214 2016-11-23 08:24 采纳率: 50%
浏览 1130
已采纳

Android制作游标控制Edittext数值,输入edittext数值游标跟着变动

图片说明

  • 写回答

3条回答 默认 最新

  • 邪蒿 2016-11-24 06:41
    关注

    注意点,只有当结束变化时才去通知另一控件,不然会形成死循环

    public class MainActivity extends AppCompatActivity {
    
        private WheelView mWheelView;//游标控件
        private EditText mMoneyEt;//金额输入框
        private int unitValue = 100;
        private int maxValue = 100000;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWheelView = (WheelView) findViewById(R.id.wheelview);
            mMoneyEt = (EditText) findViewById(R.id.et_money);
    
            final List<String> items = new ArrayList<>();
            for (int i = 0; i <= maxValue / unitValue; i++) {
                items.add(String.valueOf(i * unitValue));
            }
    
    
            mWheelView.setItems(items);
    
            mMoneyEt.setText(String.format("%1$s", ""));
    
            mWheelView.setOnWheelItemSelectedListener(new WheelView.OnWheelItemSelectedListener() {
                @Override
                public void onWheelItemSelected(WheelView wheelView, int position) {
                    String valueStr = wheelView.getItems().get(position);
                    mMoneyEt.setText(String.format("%1$s", valueStr));
                }
    
                @Override
                public void onWheelItemChanged(WheelView wheelView, int position) {
                }
            });
    
            setPricePoint(mMoneyEt, maxValue);
    
        }
    
        public void setPricePoint(final EditText editText, final float max) {
            editText.addTextChangedListener(new TextWatcher() {
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before,
                                          int count) {
                    //控制金额格式
                    if (s.toString().contains(".")) {
                        if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                            s = s.toString().subSequence(0,
                                    s.toString().indexOf(".") + 3);
                            editText.setText(s);
                            editText.setSelection(s.length());
                        }
                    }
                    if (s.toString().trim().substring(0).equals(".")) {
                        s = "0" + s;
                        editText.setText(s);
                        editText.setSelection(2);
                    }
    
                    String input = s.toString().trim();
                    if (!TextUtils.isEmpty(input)) {
                        float value = Float.valueOf(input);
                        if (value > max) {
                            s = String.valueOf(max);
                            editText.setText(String.valueOf(max));
                        }
                    }
    
                    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;
                        }
                    }
                }
    
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                                              int after) {
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    if (TextUtils.isEmpty(s.toString().trim()))
                        return;
                    float value = Float.valueOf(s.toString().trim());
                    int position = (int) (value / unitValue);
                    if (value > max) {
                        position = (int) (max / unitValue);
                    }
                    mWheelView.selectIndex(position);//控制游标变化
                }
    
            });
    
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化