Android如何实现数字九宫格软键盘
这篇文章主要介绍了Android如何实现数字九宫格软键盘,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
前言
一开始大概是这种
需求
组长说 要不搞一个自定义软键盘吧 数字搞大点 方便外卖员输入数字
我设置了输入EditText的输入格式为Number 还是不行
那就开搞吧
先来看下实现的效果图吧
实现效果GIF
实现代码
自定义View 一个NineNumericKeyboardView
/** *AuthorbyLyu *Dateon2021/5/26-19:55 *Description:九宫格数字软键盘 */ publicclassNineNumericKeyboardViewextendsView{ /** *列 */ privatestaticfinalintTOTAL_COL=3; /** *行 */ privatestaticfinalintTOTAL_ROW=4; privatePaintHuiseBgPaint,linePaint; privatePaintmTextPaint; privateintmViewWidth;//键盘宽度 privateintmViewHight;//键盘高度 privatefloatmCellWidth,mCellHight;//单元格宽度、高度 privateRowrows[]=newRow[TOTAL_ROW]; privateBitmapbitmap;//删除按钮图片 privatePaintmCutTextPaint; //回调方法 publicinterfaceCallBack{ voidclickNum(Stringnum);//回调点击的数字 voiddeleteNum();//回调删除 } privateCallBackmCallBack;//回调 publicvoidsetOnCallBack(CallBackcallBack){ mCallBack=callBack; } publicNineNumericKeyboardView(Contextcontext,AttributeSetattrs,intdefStyle){ super(context,attrs,defStyle); init(context); } publicNineNumericKeyboardView(Contextcontext,AttributeSetattrs){ super(context,attrs); init(context); } publicNineNumericKeyboardView(Contextcontext){ super(context); init(context); } @Override protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); drawLine(canvas); for(inti=0;i=TOTAL_COL||row>=TOTAL_ROW) return; if(rows[row]!=null){ mClickCell=newCell(rows[row].cells[col].num,rows[row].cells[col].state,rows[row].cells[col].i, rows[row].cells[col].j); rows[row].cells[col].state=State.CLICK_NUM; if("-5".equals(rows[row].cells[col].num)){ mCallBack.deleteNum(); }else{ mCallBack.clickNum(rows[row].cells[col].num); } invalidate(); } } /** *组以一行为一组 */ privateclassRow{ publicintj; Row(intj){ this.j=j; } //一行3个单元格 publicCell[]cells=newCell[TOTAL_COL]; publicvoiddrawCells(Canvascanvas){ for(inti=0;i numKeys=Arrays.asList("1","2","3","4","5","6","7","8","9","0"); /** *填充数字 */ privatevoidfillDate(){ intpostion=0; for(inti=0;i 使用方法
利用android自带的组件PopupWindow在指定页面的下方弹出即可 完成效果
在指定的View页面
//初始化键盘 privatevoidinitKeyboardView(){ //设置不弹出系统键盘 etInputPickupCode.setInputType(InputType.TYPE_NULL); //自己监听EditText的点击事件弹出我们自定义的键盘 etInputPickupCode.setOnClickListener(view->mPop.showAtLocation(llKey,Gravity.BOTTOM,0,0)); mPop=newPopupWindow(); mPopView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.custom_keyboardview,null); mPop.setContentView(mPopView); mPop.setTouchable(true); mPop.setFocusable(true); mPop.setBackgroundDrawable(newColorDrawable()); mPop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); mPop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); mCustomKeyView=mPopView.findViewById(R.id.key_view); //设置回调,并进行文本的插入与删除 mCustomKeyView.setOnCallBack(this); } @Override publicvoidclickNum(Stringnum){ if(etInputPickupCode.getText().length()<8){ etInputPickupCode.append(num); } } @Override publicvoiddeleteNum(){ intlast=etInputPickupCode.getText().length(); if(last>0){ //删除最后一位 etInputPickupCode.getText().delete(last-1,last); } }感谢你能够认真阅读完这篇文章,希望小编分享的“Android如何实现数字九宫格软键盘”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!
推荐阅读
-
我的世界windows版怎么下载手机版
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
怎么使用Android基准配置文件Baseline Profile方案提升启动速度...
-
HTML5如何实现禁止android视频另存为
HTML5如何实现禁止android视频另存为今天小编给大家分享一...
-
学java好还是学php好?