Android自定义Dialog带分隔的8位输入框按钮回调输入值
来源:互联网 发布:武易传奇物品数据库 编辑:程序博客网 时间:2024/05/01 20:51
第一次写博客,实现一个分隔输入框的自定义对话框,点击按钮通过回调方法在调用界面获取输入值,代码也是东拼西凑来的,所以谢谢各位的分享,从哪抄的忘了所以就不贴地址了,如果在意,请联系我删除。话不多说直接贴代码。
首先看一下效果图,大家可以看看是不是自己想要的效果,避免浪费时间。
一、布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="350dp" android:layout_height="230dp" android:background="@drawable/shape_corner_backcolor" android:gravity="center" android:orientation="vertical"> <TextView android:id="@+id/title_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请输入珠子上的数字" android:textColor="#000" android:textSize="18dp" /> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/shape_corner_black" android:gravity="center" android:orientation="horizontal"> <TextView android:id="@+id/num_1" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/lift_corner_back" android:gravity="center" android:textColor="#000" android:textSize="20dp" /> <TextView android:id="@+id/num_2" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/shape_stroke" android:gravity="center" android:textColor="#000" android:textSize="20dp" /> <TextView android:id="@+id/num_3" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/shape_stroke" android:gravity="center" android:textColor="#000" android:textSize="20dp" /> <TextView android:id="@+id/num_4" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/shape_stroke" android:gravity="center" android:textColor="#000" android:textSize="20dp" /> <TextView android:id="@+id/num_5" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/shape_stroke" android:gravity="center" android:textColor="#000" android:textSize="20dp" /> <TextView android:id="@+id/num_6" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/shape_stroke" android:gravity="center" android:textColor="#000" android:textSize="20dp" /> <TextView android:id="@+id/num_7" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/shape_stroke" android:gravity="center" android:textColor="#000" android:textSize="20dp" /> <TextView android:id="@+id/num_8" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/right_corner_back" android:gravity="center" android:textColor="#000" android:textSize="20dp" /> </LinearLayout> <EditText android:id="@+id/et_real" android:layout_width="310dp" android:layout_height="40dp" android:background="@null" android:cursorVisible="false" android:inputType="number" android:maxLength="8" android:maxLines="1" android:textColor="#00000000" android:textCursorDrawable="@null" /> </FrameLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp"> <Button android:id="@+id/abrogate_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/shape_d32e37" android:text="取消" /> <Button android:id="@+id/count_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="45dp" android:background="@drawable/shape_01caff" android:text="确认" /> </LinearLayout> </LinearLayout> </LinearLayout>这是dialog的布局文件,稍后我会上传背景的.xml文件(看来下上传后最少需要2个积分下载,那就在后边贴出来吧,只贴一个,其他类似)。没有什么复杂的东西,注意的是中间有个帧布局,透明的EditText覆盖在8个框框上边,这样是可以通过点击输入区域弹出键盘等效果,代码里也实现了在动弹出系统键盘,保证开始状态显示键盘,提高友好性。
二、主要代码
/** * 挫其锐,解其纷,和其光,同其尘。 */ public class NumberDialog extends Dialog implements View.OnClickListener { private TextView num_1; private TextView num_2; private TextView num_3; private TextView num_4; private TextView num_5; private TextView num_6; private TextView num_7; private TextView num_8; private Button positiveButton; private Button negativeButton; private EditText relNumEdit; private String _num; private NumCallback mCallback; private Context mContext; public interface NumCallback { void callback(String nums); } public NumberDialog(Context context) { super(context); mContext = context; requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.dialog_nums); setCanceledOnTouchOutside(false); num_1 = findViewById(R.id.num_1); num_2 = findViewById(R.id.num_2); num_3 = findViewById(R.id.num_3); num_4 = findViewById(R.id.num_4); num_5 = findViewById(R.id.num_5); num_6 = findViewById(R.id.num_6); num_7 = findViewById(R.id.num_7); num_8 = findViewById(R.id.num_8); relNumEdit = findViewById(R.id.et_real); relNumEdit.addTextChangedListener(new EditChangeListener(relNumEdit)); positiveButton = findViewById(R.id.count_num); positiveButton.setOnClickListener(this); negativeButton = findViewById(R.id.abrogate_num); negativeButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.count_num: if (_num != null) { buttonClickListener.positiveButtonClick(_num); NumberDialog.this.dismiss(); } else { Toast.makeText(mContext, "输入位数错误", Toast.LENGTH_LONG).show(); } break; case R.id.abrogate_num: buttonClickListener.negativeButtonClick(); NumberDialog.this.dismiss(); break; } } public void showKeyboard() { if (relNumEdit != null) { //设置可获得焦点 relNumEdit.setFocusable(true); relNumEdit.setFocusableInTouchMode(true); //请求获得焦点 relNumEdit.requestFocus(); //调用系统输入法 InputMethodManager inputManager = (InputMethodManager) relNumEdit .getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(relNumEdit, 0); } } private OnButtonClickListener buttonClickListener; public void setOnButtonClickListener(OnButtonClickListener listener) { this.buttonClickListener = listener; } //实现回调功能 public interface OnButtonClickListener { void positiveButtonClick(String s); void negativeButtonClick(); } public void setNumCallback(NumCallback mCallback) { this.mCallback = mCallback; } private class EditChangeListener implements TextWatcher { private EditText editText; public EditChangeListener(EditText editText) { this.editText = editText; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { String ret = s.toString().trim(); Log.i("dialog", "afterTextChanged: " + ret); if (editText.getId() == R.id.et_real) { char[] array = ret.toCharArray(); int i; for (i = 0; i < array.length; i++) { switch (i) { case 0: num_1.setText(String.valueOf(array[0])); break; case 1: num_2.setText(String.valueOf(array[1])); break; case 2: num_3.setText(String.valueOf(array[2])); break; case 3: num_4.setText(String.valueOf(array[3])); break; case 4: num_5.setText(String.valueOf(array[4])); break; case 5: num_6.setText(String.valueOf(array[5])); break; case 6: num_7.setText(String.valueOf(array[6])); break; case 7: num_8.setText(String.valueOf(array[7])); break; } } for (int j = i; j < 8; j++) { switch (j) { case 0: num_1.setText(""); break; case 1: num_2.setText(""); break; case 2: num_3.setText(""); break; case 3: num_4.setText(""); break; case 4: num_5.setText(""); break; case 5: num_6.setText(""); break; case 6: num_7.setText(""); break; case 7: num_8.setText(""); break; } } if (array.length == 8) { _num = ret; if (mCallback != null) { mCallback.callback(ret); } } } } } }
以上是主要代码,其中有两个接口,调用效果是不同的。
public interface NumCallback { void callback(String nums); }
这个接口这样调用
dialog.setNumCallback(new NumberDialog.NumCallback() { @Override public void callback(String nums) { } });
参数nums将在输入8位数字后自动赋值,具体请看dialog代码最后,通过mCallback.callback(ret)完成赋值。需要注意的是这种方法在输入8位后自动返回输入值,与按钮没有关系。
如此看第二个接口
public interface OnButtonClickListener { void positiveButtonClick(String s); void negativeButtonClick(); }
从名字就可以看出这是这是点击按钮的监听回调方法,这个方法在界面调用方法如下:
dialog.setOnButtonClickListener(new NumberDialog.OnButtonClickListener() { @Override public void positiveButtonClick(String s) { Toast.makeText(MainActivity.this, "sha" + s, Toast.LENGTH_LONG).show(); } @Override public void negativeButtonClick() { } });
参数s就是输入的值。然后做你爱做的事。
刚才说的自动弹出键盘的放在dialog的代码里,方法showKeyboard()。
我是通过一个定时调用的这个方法,如下:
new Timer().schedule(new TimerTask() { @Override public void run() { dialog.showKeyboard(); } }, 300);
最后说一下,删除框内数字我用了一个for循环,如果有更好的方式请分享。
另附部分代码下载。
背景布局文件
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:bottomLeftRadius="5dp" android:bottomRightRadius="5dp" android:topLeftRadius="5dp" android:topRightRadius="5dp" /> <stroke android:width="0.5dp" android:color="#fff" /> <solid android:color="#fff"/></shape>
阅读全文
0 0
- Android自定义Dialog带分隔的8位输入框按钮回调输入值
- Android输入框带删除按钮的自定义View
- Android自定义带删除按钮的输入框EditText
- android带输入框的Dialog
- Android带输入框的dialog
- 带输入的Dialog
- android 自动输入完成提示 自定义适配器适用于自定义分隔符带中文的提示
- android 自定义带关闭按钮的dialog
- 自定义控件-带删除按钮的输入框
- Android自定义控件开发系列(二)——带清除按钮的圆角输入框
- Android自定义View之有动画特效带清除按钮的输入框
- 自定义Android Dialog EditText 密码输入框
- Android中带有输入框的自定义Dialog
- 带输入文本框的Dialog
- Android-带清除按钮的输入框实现
- [Android实例] 带clean按钮的输入框
- 带输入框的自定义dialog 点击外部消失 输入框可以弹出软键盘 去除外部黑框
- Android 自定义EditText输入框 带清空按钮
- 基于Docker的以太坊私有环境搭建
- Codeforces Round #448 (Div. 2) B. XK Segments 排序+二分
- Keras框架神经网络算法训练MNIST分类准确率(实验)
- JSONObject转化为数组,方便前台数据遍历
- PHP curl爬取数据 加入cookie值
- Android自定义Dialog带分隔的8位输入框按钮回调输入值
- 使用jquery修改css样式中带有'!important'的属性
- IntelliJ IDEA 更新版本之后,中文输入法不能正常使用的解决办法
- python 输出上个月的月末日期
- C++状态模式
- JS动态增加表格
- Android 简单实现可全屏拖动,可点击的View
- 动态规划 嵌套模型
- YUM本地源制作