前言
从前,有一个数字
,有两个好伙伴,一个是加按钮
,另一个是减按钮
,加按钮
被点击的时候,数字
就会加一,减按钮
被点击的时候,数字
就会减一,而加按钮
一直被按着的时候,数字
就会一直加一;同理,减按钮
一直被按着的时候,数字
就会一直减一。
可配合输入框范围限制,实现一个可编辑的输入需求。
Android EditText输入框限制输入数值范围
android EditText输入框限制输入数字大小,一个页面内多次调整范围
xml
布局文件如下:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_less"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="减1" />
<TextView
android:id="@+id/txt_num"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="0" />
<Button
android:id="@+id/btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="加1" />
</LinearLayout>
声明控件
txtNum = findViewById(R.id.txt_num);
btnLess = findViewById(R.id.btn_less);
btnAdd = findViewById(R.id.btn_add);
加一方法
/**
* 加
*/
@SuppressLint("SetTextI18n")
private void add() {
int num = Integer.parseInt(txtNum.getText().toString());
num ++;
txtNum.setText(num + "");
}
减一方法
/**
* 减
*/
@SuppressLint("SetTextI18n")
private void less() {
int num = Integer.parseInt(txtNum.getText().toString());
if (num != 0) {
num --;
txtNum.setText(num + "");
}
}
点击事件
// 点击事件
btnLess.setOnClickListener(onClickListener);
btnAdd.setOnClickListener(onClickListener);
/**
* 点击
*/
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_less:
// 单点减
less();
break;
case R.id.btn_add:
// 单点加
add();
break;
}
}
};
长按事件
// 长按事件
btnLess.setOnLongClickListener(onLongClickListener);
btnAdd.setOnLongClickListener(onLongClickListener);
/**
* 长按
*/
private View.OnLongClickListener onLongClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mBtnTouchMap.put(v.getId(), true);
mHandler.sendEmptyMessage(LONG_CLICK);
return false;
}
};
触摸事件
// 触摸事件
btnLess.setOnTouchListener(onTouchListener);
btnAdd.setOnTouchListener(onTouchListener);
/**
* 触摸
* 监听手指抬起,长按结束
*/
private View.OnTouchListener onTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
// 手指举起
mBtnTouchMap.put(v.getId(), false);
break;
}
return false;
}
};
数据记录与按时执行
/** 长按标记,记录每个按钮是否正在按着 */
private SparseArray<Boolean> mBtnTouchMap = new SparseArray<>();
/** handler标记 */
private static final int LONG_CLICK = 10001;
/** 处理 */
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case LONG_CLICK:
for (int i = 0; i < mBtnTouchMap.size(); i++) {
int viewId = mBtnTouchMap.keyAt(i);
// 长按结束,就不再继续往下走了
if (!mBtnTouchMap.valueAt(i)) continue;
switch (viewId) {
case R.id.btn_less:
less();
break;
case R.id.btn_add:
add();
break;
}
// 每隔150毫秒做一次
mHandler.sendEmptyMessageDelayed(LONG_CLICK, 150);
}
break;
}
}
};