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);//控制游标变化 } }); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化