Android自定义软键盘

本文介绍了如何在Android中自定义软键盘,包括创建键盘控件、处理软键盘遮挡EditText的问题,以及处理EditText的光标和内容输入。示例中参考了百度钱包的软键盘设计,并提供了代码实现和效果展示。
摘要由CSDN通过智能技术生成

前不久由于项目的需要,要做一个自定义的软键盘,我也上网看了很多,都觉得很繁琐,所以想自己动手实现个。以备不时之需把。我选择了参考百度钱包的软键盘,看起来还不错:

这里写图片描述

下面一起来实现它:


1.写一个键盘控件,这个实现起来比较简单,就不多说了

public class SoftInputBoard extends RelativeLayout
        implements View.OnClickListener{
   

    private Scroller mScroller;
    private int mScreenHeigh = 0;
    private int mScreenWidth = 0;
    private Boolean isMoving = false;
    private int viewHeight = 0;
    public boolean isShow = false;
    public boolean mEnabled = true;
    public boolean mOutsideTouchable = true;
    private int mDuration = 800;

    private boolean userIsLongPress = false;

    @Override
    public void onClick(View v) {

        String value = "";

        int id = v.getId();
        if(id == R.id.tv0){
            value = "0";
        }else if(id == R.id.tv1){
            value = "1";
        }else if(id == R.id.tv2){
            value = "2";
        }else if(id == R.id.tv3){
            value = "3";
        }else if(id == R.id.tv4){
            value = "4";
        }else if(id == R.id.tv5){
            value = "5";
        }else if(id == R.id.tv6){
            value = "6";
        }else if(id == R.id.tv7){
            value = "7";
        }else if(id == R.id.tv8){
            value = "8";
        }else if(id == R.id.tv9){
            value = "9";
        }else if(id == R.id.iv_delete){
            value = "delete";
        }else if(id == R.id.tvx){
            value = "X";
        }

        if(payListener != null){
            payListener.chooseWay(value);
        }

    }

    public interface ChoosePayWayListener{
   
        void chooseWay(String value);
    }

    public ChoosePayWayListener payListener;

    public void setOnChoosePayWayListener(ChoosePayWayListener payListener){
        this.payListener = payListener;
    }

    private final static String TAG = "SoftInputView";
    public SoftInputBoard(Context context) {
        super(context);
        init(context);
    }

    public SoftInputBoard(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public SoftInputBoard(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }


    private void init(Context context) {
        setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
        setFocusable(true);
        mScroller = new Scroller(context);
        mScreenHeigh = BaseTools.getWindowHeigh(context);
        mScreenWidth = BaseTools.getWindowWidth(context);
        this.setBackgroundColor(Color.argb(0, 0, 0, 0));
        final View view = LayoutInflater.from(context).inflate(R.layout.view_soft_input, null);


        TextView tv0 = (TextView)view.findViewById(R.id.tv0);
        TextView tv1 = (TextView)view.findViewById(R.id.tv1);
        TextView tv2 = (TextView)view.findViewById(R.id.tv2);
        TextView tv3 = (TextView)view.findViewById(R.id.tv3);
        TextView tv4 = (TextView)view.findViewById(R.id.tv4);
        TextView tv5 = (TextView)view.findViewById(R.id.tv5);
        TextView tv6 = (TextView)view.findViewById(R.id.tv6);
        TextView tv7 = (TextView)view.findViewById(R.id.tv7);
        TextView tv8 = (TextView)view.findViewById(R.id.tv8);
        TextView tv9 = (TextView)view.findViewById(R.id.tv9);
        TextView tvx = (TextView)view.findViewById(R.id.tvx);

        final RelativeLayout ivDelete = (RelativeLayout)view.findViewById(R.id.iv_delete);
        ivDelete.setClickable(true);

        tv0.setOnClickListener(this);
        tv1.setOnClickListener(this);
        tv2.setOnClickListener(this);
        tv3.setOnClickListener(this);
        tv4.setOnClickListener(this);
        tv5.setOnClickListener(this);
        tv6.setOnClickListener(this);
        tv7.setOnClickListener(this);
        tv8.setOnClickListener(this);
        tv9.setOnClickListener(this);
        tvx.setOnClickListener(this);

        ivDelete.setOnClickListener(this);
        ivDelete.setOnLongClickListener(new OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if(payListener != null){
                    payListener.chooseWay("xdelete");
                }
                return false;
            }
        });


        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
        addView(view, params);

        this.setBackgroundColor(Color.argb(0, 0, 0, 0));
        view.post(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                viewHeight = view.getHeight();
            }
        });

        SoftInputBoard.this.scrollTo(0, mScreenHeigh);
        ImageView btn_close = (ImageView)view.findViewById(R.id.btn_close);
        btn_close.setOnClickListener(new OnClickList
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值