我想用两种方法来改变EditText字段的输入。 EditText字段仅允许数字(“12.34”格式)。
正常行为 当用户触摸EditText时,它应该显示键盘,并且表现得像普通的EditText字段
移动行为 当用户触摸并向上/向下拖动时,我希望EditText递增/递减。
我已经搜索过这种类型的实现,因为我希望更多的人有类似的实现,但无法找到它。
昨天我尝试了以下代码,但这不起作用。在拖动期间键盘仍然显示,使用睡眠也不是一个很好的实现。
希望有人能帮助我找到更好的解决方案。
提前致谢!
inputET.setOnTouchListener(otl);
private OnTouchListener otl = new OnTouchListener() {
public boolean onTouch (View v, MotionEvent event) {
if (v == inputET) {
// to distinguish between touch and drag
if (event.getX > 50) { // drag
float oldPos = event.getX;
thread.sleep(10);
inputET.setText(Float.toString(Float.parseFloat(inputET.getText()) - oldPos - event.getX);
return true;
} else { // touch
return false;
}
}
};
答案 0 :(得分:1)
你的代码没问题,只需删除线程的睡眠并将其添加到显示EditText的活动中:
android:windowSoftInputMode="stateHidden"
我还会将此添加到您的if条件中:
if (event.getAction() == MotionEvent.ACTION_MOVE && event.getX() > 50)
在我的设备中测试过(Android> 4.0)并且有效,希望它可以帮助您:)
答案 1 :(得分:1)
float mLastMotionX;
@Override
public boolean onTouch(View v, MotionEvent ev) {
// TODO Auto-generated method stub
final int action = ev.getAction();
final float x = ev.getX();
switch (action) {
case MotionEvent.ACTION_DOWN:
{
mLastMotionX = x;
break;
}
case MotionEvent.ACTION_MOVE:
{
final int deltaY = (int) (x - mLastMotionX);
if( Math.abs(deltaY) % 50 == 0 && deltaY != 0)
{
mLastMotionX = x;
float current = Float.valueOf(mTextView.getText().toString()) + deltaY;
mTextView.setText("" + round(current, 2.0));
}
break;
}
}
return true;
}
private double round( final float value, double precision )
{
precision = Math.pow(10, precision);
return Math.round(value * precision) / precision;
}
您应该为EditText
设置初始文本,例如10.34。