GridLayout自定义数字键盘(两个EditText)

功能说明:

适用于两个EditText输入框,并控制输入字符的长度,点击键盘中的"确定"按钮完成输入,点击"前一项"光标跳到前一个EditText

运行效果图如下:

布局文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     android:focusable="true"
 8     android:focusableInTouchMode="true">
 9
10     <LinearLayout
11         android:layout_marginTop="10dp"
12         android:layout_width="match_parent"
13         android:layout_height="60dp">
14
15         <EditText
16             android:id="@+id/edt1"
17             android:maxLength="4"
18             android:textSize="20sp"
19             android:textColor="#000000"
20             android:textStyle="bold"
21             android:layout_marginLeft="10dp"
22             android:selectAllOnFocus="true"
23             android:focusableInTouchMode="true"
24             android:layout_width="120dp"
25             android:layout_height="match_parent" />
26
27         <EditText
28             android:textSize="20sp"
29             android:textColor="#000000"
30             android:textStyle="bold"
31             android:id="@+id/edt2"
32             android:maxLength="4"
33             android:selectAllOnFocus="true"
34             android:layout_marginLeft="10dp"
35             android:layout_width="120dp"
36             android:layout_height="match_parent" />
37     </LinearLayout>
38     <TextView
39         android:textSize="20sp"
40         android:textColor="#000000"
41         android:textStyle="bold"
42         android:layout_marginTop="20dp"
43         android:id="@+id/tv"
44         android:layout_width="match_parent"
45         android:layout_height="400dp" />
46     <include
47         android:layout_marginTop="65dp"
48         android:layout_width="match_parent"
49         android:layout_height="wrap_content"
50         android:layout_alignParentBottom="true"
51         layout="@layout/gridlayout"/>
52 </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#34373e">
    <Button
        android:layout_marginTop="4dp"
        android:layout_marginLeft="3dp"
        android:id="@+id/txt0"
        android:layout_width="350dp"
        android:layout_height="80dp"
        android:layout_column="0"
        android:layout_columnSpan="3"
        android:layout_gravity="fill_horizontal"
        android:layout_row="1"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="0" />

    <ImageButton
        android:layout_marginTop="4dp"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="5dp"
        android:id="@+id/delete"
        android:layout_width="153dp"
        android:layout_height="80dp"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:layout_column="3"
        android:layout_gravity="fill_horizontal"
        android:layout_row="1"
        android:src="@drawable/delete" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:id="@+id/txt1"
        android:layout_width="144dp"
        android:layout_height="80dp"
        android:layout_column="0"
        android:layout_row="2"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="1" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:id="@+id/txt2"
        android:layout_width="144dp"
        android:layout_height="80dp"
        android:layout_column="1"
        android:layout_row="2"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="2" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:id="@+id/txt3"
        android:layout_width="144dp"
        android:layout_height="80dp"
        android:layout_column="2"
        android:layout_row="2"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="3" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="5dp"
        android:id="@+id/next"
        android:layout_width="123dp"
        android:layout_height="80dp"
        android:layout_column="3"
        android:layout_gravity="fill_horizontal"
        android:layout_row="2"
        android:textSize="50dp"
        android:text="前一项"
        android:background="#000000"
        android:textColor="#FFFFFF" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:id="@+id/txt4"
        android:layout_width="144dp"
        android:layout_height="80dp"
        android:layout_column="0"
        android:layout_row="3"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="4" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:id="@+id/txt5"
        android:layout_width="144dp"
        android:layout_height="80dp"
        android:layout_column="1"
        android:layout_row="3"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="5" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:id="@+id/txt6"
        android:layout_width="144dp"
        android:layout_height="80dp"
        android:layout_column="2"
        android:layout_row="3"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="6" />
    <Button
        android:layout_marginLeft="3dp"
        android:layout_marginTop="3dp"
        android:layout_marginRight="5dp"
        android:layout_marginBottom="3dp"
        android:id="@+id/sure"
        android:layout_width="153dp"
        android:layout_height="160dp"
        android:layout_columnSpan="2"
        android:layout_rowSpan="2"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="确  定" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:layout_marginBottom="3dp"
        android:id="@+id/txt7"
        android:layout_width="144dp"
        android:layout_height="77dp"
        android:layout_column="0"
        android:layout_row="4"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="7" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:layout_marginBottom="3dp"
        android:id="@+id/txt8"
        android:layout_width="144dp"
        android:layout_height="77dp"
        android:layout_column="1"
        android:layout_row="4"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:text="8" />

    <Button
        android:layout_marginTop="3dp"
        android:layout_marginLeft="3dp"
        android:id="@+id/txt9"
        android:layout_width="144dp"
        android:layout_height="77dp"
        android:layout_column="2"
        android:layout_row="4"
        android:background="#000000"
        android:textColor="#FFFFFF"
        android:textSize="50dp"
        android:layout_marginBottom="3dp"
        android:text="9" />

</GridLayout>

Java代码:

public class MainActivity extends AppCompatActivity {
    private EditText edt1,edt2;
    private String str1="",str2="",string="";
    private TextView textView;
    private int[] btidNum = { R.id.txt0, R.id.txt1, R.id.txt2, R.id.txt3,
            R.id.txt4, R.id.txt5, R.id.txt6, R.id.txt7, R.id.txt8, R.id.txt9};
    private Button[] buttons = new Button[btidNum.length];
    boolean flag=true;

    //控制第一个EditText中输入数据的长度
    TextWatcher tw = new TextWatcher() {
        //@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) {
            if (s.toString().length() == 4) {
                if (edt1.isFocused()) {
                    edt1.clearFocus();
                    edt2.requestFocus();
//                    edt2.setText("1");
//                    edt2.setSelection(1);    //   设置光标的位置
                    string="";
                    flag=false; //第二个
                }
                else if(edt2.isFocusable()){
                    edt2.clearFocus();
                    edt1.requestFocus();
                    string="";
                    flag=true;//第一个
                }
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edt1=(EditText)findViewById(R.id.edt1);
        edt1.addTextChangedListener(tw);
        edt2=(EditText)findViewById(R.id.edt2);
        edt2.addTextChangedListener(tw);
        textView=(TextView)findViewById(R.id.tv);
        edt1.requestFocus();
        GetNumber get = new GetNumber();
        for (int i = 0; i < btidNum.length; i++) {
            buttons[i] = (Button) findViewById(btidNum[i]);
            buttons[i].setOnClickListener(get);
        }
        ImageButton delete=(ImageButton)findViewById(R.id.delete);
        Button next=(Button)findViewById(R.id.next);
        Button sure=(Button)findViewById(R.id.sure);

        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(str1.length()>0&&flag==true){
                    str1=str1.substring(0,str1.length()-1);
                    edt1.setText(str1);
                    edt1.setSelection(str1.length());
                    string=edt1.getText().toString();
                }else if(str2.length()>0&&flag==false){
                    str2=str2.substring(0,str2.length()-1);
                    edt2.setText(str2);
                    edt2.setSelection(str2.length());
                    string=edt2.getText().toString();
                }
            }

        });

        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(edt2.isFocusable()){
                    edt2.clearFocus();
                    edt1.requestFocus();
                    string="";
                    flag=true;
                }
            }
        });

        sure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                str1=edt1.getText().toString().trim();
                str2=edt2.getText().toString().trim();
                textView.append(str1+"======="+str2+"\n");
            }
        });
    }

    // 给 EditText赋值
    class GetNumber implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            String txt = ((Button) v).getText().toString();
            string=string+txt;
            if(flag==true){
                str1=string;
                edt1.setText(str1);
                edt1.setSelection(str1.length());
            }else if(flag==false){
                str2=string;
                edt2.setText(str2);
                edt2.setSelection(str2.length());
            }
        }
    }
}

如需屏蔽系统键盘,请借鉴上一篇

时间: 2024-10-16 07:07:23

GridLayout自定义数字键盘(两个EditText)的相关文章

Android 自定义数字键盘

业务需求自定义数字键盘,写了一个demo 主要代码: import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.util.DisplayMetrics; import android.view.View; import android.view.WindowManager; import android.vi

一个高仿闲鱼键自定义数字键盘特效

博客地址: http://www.jianshu.com/p/be68facfc4b8 仿造android端闲鱼发布选择价格数字键盘,自定义数字键盘 public class MyKeyBoardView extends KeyboardView { private Context mContext; private Keyboard mKeyBoard; public MyKeyBoardView(Context context, AttributeSet attrs) { super(con

android安卓屏蔽禁用系统输入法,自定义软键盘,解决EditText光标问题demo

目前很多的输入法都有自动提示补全功能,在一些应用场景里不适用,需要禁用系统输入法,自定义软键盘,EditText的光标问题是比较头疼的,网上的说法很多,然而大部分都是解决不了问题的.以下是本人做的一个demo供网友参考. 直接上代码: xml软键盘:         <android.inputmethodservice.KeyboardView             android:id="@+id/keyboard_view"             android:lay

自定义数字键盘组件化方案

实现场景:点击输入框,弹出自定义数字键盘,输入数字后点击确定,输入框中显示对应数字.如果输入框中有值,则默认带到小键盘中. 其中:数字键盘为子组件.输入框公用该子组件. 效果图如下: 难点: 1.props传入数字键盘组件中的值,无法直接修改.需要通过计算属性进行修改. 2.公用键盘时,保证符合预期,数字不会错乱.使用v-for,巧用name属性,通过点击时更改传入的参数,达到目的. 下面时完整代码: index.vue <template> <view class="cont

iOS自定义数字键盘

自定义键盘实际就是设置UITextField的inputView属性,首先我们要做的是自定义一个UIView,实现键盘的样式. 自定义View代码如下: 1 #import <UIKit/UIKit.h> 2 //创建自定义键盘协议 3 @protocol My_KeyBoardDelegate <NSObject> 4 //创建协议方法 5 @required//必须执行的方法 6 - (void)numberKeyBoard:(NSInteger) number; 7 - (v

GridView+PopupWindow自定义数字键盘

public class SimpleGridViewTest extends Activity {EditText editText;private PopupWindow popupWindow;private GridView mGridView;private View contentview;private List<String> datas = new ArrayList<String>();GridViewAdapter adapter;private static

html5自定义数字键盘

原理:使用div模拟输入框,避免手机原生键盘弹出,键盘使用div模拟,点击事件使用js控制,光标闪烁使用css模拟,具体代码如下: 1 <!doctype html> 2 <html lang="zh"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,ch

Android 自定义的数字键盘 支持随意拖动 和稳定的字符输入的控件

经过 研究 实现了自定义 键盘 ,支持随意拖动 和数字及其他字符输入 下面是主要的代码 和使用方法 import android.content.Context; import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.Gravity; import android.view.Mo

简单自定义安全键盘(只能输入字母,数字,部分符号)

以前知道有个KeyboardView这个东西可以自定义键盘,但因为一直没涉及到,所以没研究过,今天看到工商银行密码输入的键盘觉得挺好看,就来研究一下. 先看一下工商银行的图 下边是我的效果图 参考了:http://blog.csdn.net/hfsu0419/article/details/7924673 http://www.cnblogs.com/jason-star/archive/2012/12/15/2819174.html 两篇博客. 现在做一下笔记. 在需要显示键盘的布局中,插入这