自定义数字软键盘

需求:

1.数字键盘

2.输入删除,光标要随之移动

3.删除键长按全部清除

4.点击键盘背景有颜色变换效果

效果图:

布局

<?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:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp">

        <TextView
            android:id="@+id/number_1"
            style="@style/number_keyboard"
            android:text="1" />

        <TextView
            android:id="@+id/number_2"
            style="@style/number_keyboard"
            android:text="2" />

        <TextView
            android:id="@+id/number_3"
            style="@style/number_keyboard"
            android:text="3" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp">

        <TextView
            android:id="@+id/number_4"
            style="@style/number_keyboard"
            android:text="4" />

        <TextView
            android:id="@+id/number_5"
            style="@style/number_keyboard"
            android:text="5" />

        <TextView
            android:id="@+id/number_6"
            style="@style/number_keyboard"
            android:text="6" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp">

        <TextView
            android:id="@+id/number_7"
            style="@style/number_keyboard"
            android:text="7" />

        <TextView
            android:id="@+id/number_8"
            style="@style/number_keyboard"
            android:text="8" />

        <TextView
            android:id="@+id/number_9"
            style="@style/number_keyboard"
            android:text="9" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp">

        <ImageView
            android:id="@+id/number_clear_last"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="10dp"
            android:src="@drawable/keyboard_delete_img"
            android:background="@drawable/number_keyboard_selecter"/>

        <TextView
            android:id="@+id/number_0"
            style="@style/number_keyboard"
            android:text="0" />

        <TextView
            android:id="@+id/number_enter"
            style="@style/number_keyboard_enter"
            android:text="进入"
            android:textColor="@color/white"/>
    </LinearLayout>
</LinearLayout>
<style name="number_keyboard">
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:layout_weight">1</item>
    <item name="android:textSize">24sp</item>
    <item name="android:gravity">center</item>
    <item name="android:background">@drawable/number_keyboard_selecter</item>
</style>
<style name="number_keyboard_enter">
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:layout_weight">1</item>
    <item name="android:textSize">24sp</item>
    <item name="android:gravity">center</item>
    <item name="android:background">@drawable/number_keyboard_enter_selecter</item>
</style>

number_keyboard_selecter

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <stroke android:width="0.5dp" android:color="@color/my_middle_gray"></stroke>
            <solid android:color="@color/my_blue"></solid>
        </shape>
    </item>

    <item android:state_pressed="false">
        <shape>
            <stroke android:width="0.5dp" android:color="@color/my_middle_gray"></stroke>
            <solid android:color="@color/white"></solid>
        </shape>
    </item>
</selector>

number_keyboard_enter_selecter

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <stroke android:width="0.5dp" android:color="@color/my_middle_gray"></stroke>
            <solid android:color="@color/white"></solid>
        </shape>
    </item>

    <item android:state_pressed="false">
        <shape>
            <stroke android:width="0.5dp" android:color="@color/my_middle_gray"></stroke>
            <solid android:color="@color/my_blue"></solid>
        </shape>
    </item>
</selector>
//显示数字键盘
public void showNumberKeyboard(){
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.number_keyboard, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),R.style.DialogTheme);
    builder.setView(view);
    final AlertDialog keyDialog = builder.create();
    Window window = keyDialog.getWindow();
    window.setGravity(Gravity.BOTTOM);
    window.setWindowAnimations(R.style.dialog_animation);
    window.getDecorView().setPadding(0, 0, 0, 0);
    WindowManager.LayoutParams lp = window.getAttributes();
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
    window.setAttributes(lp);
    keyDialog.show();
    //数字键盘点击监听
    number_1 = (TextView) view.findViewById(R.id.number_1);
    number_2 = (TextView) view.findViewById(R.id.number_2);
    number_3 = (TextView) view.findViewById(R.id.number_3);
    number_4 = (TextView) view.findViewById(R.id.number_4);
    number_5 = (TextView) view.findViewById(R.id.number_5);
    number_6 = (TextView) view.findViewById(R.id.number_6);
    number_7 = (TextView) view.findViewById(R.id.number_7);
    number_8 = (TextView) view.findViewById(R.id.number_8);
    number_9 = (TextView) view.findViewById(R.id.number_9);
    number_0 = (TextView) view.findViewById(R.id.number_0);
    number_enter = (TextView) view.findViewById(R.id.number_enter);
    number_clear_last = (ImageView) view.findViewById(R.id.number_clear_last);

    number_1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_1.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_2.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_3.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_4.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_5.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_6.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_7.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_7.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_8.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_8.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_9.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            myCourse_roomId_input.setText(roomInput+number_9.getText().toString());
            myCourse_roomId_input.setSelection(roomInput.length()+1);
        }
    });
    number_0.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomInput = myCourse_roomId_input.getText().toString();
            //0不能在第一位
            if(null != roomInput && !"".equals(roomInput)){
                myCourse_roomId_input.setText(roomInput+number_0.getText().toString());
                myCourse_roomId_input.setSelection(roomInput.length()+1);
            }
        }
    });
    number_clear_last.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String roomIdInput = myCourse_roomId_input.getText().toString();
            if(roomIdInput.length()>0){
                myCourse_roomId_input.setText(roomIdInput.substring(0,roomIdInput.length()-1));
                myCourse_roomId_input.setSelection(roomIdInput.length()-1);
            }
        }
    });
    number_clear_last.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            myCourse_roomId_input.setText("");
            return false;
        }
    });
    number_enter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String roomId = myCourse_roomId_input.getText().toString();
            if(TextUtils.isEmpty(roomId)){
                Toast.makeText(getActivity(),"请输入房间号",Toast.LENGTH_SHORT).show();
            }else{
                LiveRoomAPI.getTopicInfo(roomId, new BaseCallBack<TopicInfoResponseEntity>() {
                    @Override
                    public void onSuccess(Response<TopicInfoResponseEntity> response) {
                        //跳转到直播间
                        Intent intent = new Intent(getActivity(), TopicInfoActivity.class);
                        intent.putExtra(IntentKey.topicId, roomId);
                        startActivity(intent);
                        keyDialog.dismiss();
                    }

                    @Override
                    public void onFailure(StateException exception) {
                        //弹出对话框
                        com.xuehu365.xuehu.ui.widget.AlertDialog alertDialog = new com.xuehu365.xuehu.ui.widget.AlertDialog(getActivity()).builder();
                        alertDialog.setMsg("您输入的房号有误请重新输入!");
                        alertDialog.setPositiveButton("好的", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                myCourse_roomId_input.setText("");
                                myCourse_roomId_clear.setVisibility(View.GONE);
                            }
                        });
                        alertDialog.show();
                    }
                });
            }
        }
    });
}
时间: 09-02

自定义数字软键盘的相关文章

自定义数字软键盘--封装版

布局: <?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

winform数字软键盘

最近一个项目做的触摸屏的一个应用,因为没有键盘,所有需要使用软键盘,虽然可以调用系统的软键盘,但是系统软件盘不能固定位置,即每次弹出的位置不固定,甚至有时候挡住了下一个需要输入的文本框.其次,这个程序在屏幕是全屏显示的,用户不能退出这个程序,但是调用系统软件盘后可以轻松的关闭这个程序,或者说将电脑关机重启.因此就自己写一个小键盘的程序,因为只有一个界面需要输入,所有就直接将键盘嵌入到窗体中. 首先看一下测试效果图 这里一个有四个文本框可以接受用户输入,当用户点击某一个输入框时,就可以点击按钮输入

前端angularJS利用directive实现移动端自定义软键盘的方法

最近公司项目的需求上要求我们iPad项目上一些需要输入数字的地方用我们自定义的软键盘而不是移动端设备自带的键盘,刚接到需求有点懵,因为之前没有做过,后来理了一下思路发现这东西也就那样.先看一下实现之后的效果: 实现的效果就是当点击页面中需要弹出软键盘的时候软键盘弹出,浮在页面的中间,和模态框一样的效果,可以在软键盘中输入任何数字,附带的功能有小数点.退格.清空.确定等功能.当在键盘上点击数字的时候页面中的表单中实时的添加对应的数字,上图中可以看到. 产品经理那边给的原因是iPad屏幕本来就小,如

Android自定义软键盘

前不久由于项目的需要,要做一个自定义的软键盘,我也上网看了很多,都觉得很繁琐,所以想自己动手实现个.以备不时之需把.我选择了参考百度钱包的软键盘,看起来还不错: 下面一起来实现它: 1.写一个键盘控件,这个实现起来比较简单,就不多说了 public class SoftInputBoard extends RelativeLayout implements View.OnClickListener{ private Scroller mScroller; private int mScreenH

Android 中自定义软键盘

Android 中自定义软键盘    图一为搜狗输入法.图二为自定义密码键盘.图三为自定义密码键盘 java源文件 package com.keyboarddemo; import android.content.Context; import android.graphics.Paint; import android.graphics.Rect; import android.text.method.PasswordTransformationMethod; import android.u

Android使用xml自定义软键盘效果(附源码)

Android使用xml自定义软键盘效果原理: 1,软键盘其实是个控件,使用android.inputmethodserver.KeyboardView类定义. 2,主布局中使用帧布局,当我们需要显示软键盘时设置为可见,不需要时设置为不可见. 3,编写xml文件,定义键盘内容.使用xml文件填充KeyBoardView布局 4,设置EditText的监听事件. 完成键盘开发. 上效果图: 1,源码研究android.inputmethodserver.KeyboardView: /* * Cop

第一个app-进阶:1、让EditText屏蔽软键盘仍能光标闪动:2、EditText 的inputType参数类型(密码方式-隐藏显示、只允许输入数字等等)

EditText屏蔽软键盘后,光标消失问题 开始我有个需求:屏蔽系统软键盘 于是找到并使用这个方法: //edit_text1.setInputType(InputType.TYPE_NULL); //屏蔽软键盘弹出//edit_text2.setInputType(InputType.TYPE_NULL); //屏蔽软键盘弹出//edit_text3.setInputType(InputType.TYPE_NULL); //屏蔽软键盘弹出 让三个EditText都成功地没有软键盘弹出. 后来我

软键盘挡住自定义对话框中的内容

在自定义的对话框中有EditText,获取焦点的时候弹出软键盘很可能会挡住对话框中的一些按钮或其他内容. 可以在自定义对话框中的oncreate()方法中设置软键盘的模式,如下 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 当软键盘弹出时,弹出

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

博客地址: 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