Android中如何自定义一个数字键盘
Android中如何自定义一个数字键盘
这篇文章主要介绍“Android中如何自定义一个数字键盘”,在日常操作中,相信很多人在Android中如何自定义一个数字键盘问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android中如何自定义一个数字键盘”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1. 实现键盘的 xml 布局
网格样式的布局用 GridView 或者 RecyclerView 都可以实现,其实用 GridView 更方便一些,不过我为了多熟悉 RecyclerView 的用法,这里选择用了 RecyclerView。
<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><Viewandroid:layout_width="match_parent"android:layout_height="2px"android:background="@color/btn_gray"/><RelativeLayoutandroid:id="@+id/rl_back"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/iv_back_bg"android:padding="10dp"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:src="@mipmap/keyboard_back"/></RelativeLayout><Viewandroid:layout_width="match_parent"android:layout_height="1px"android:background="@color/btn_gray"/><android.support.v7.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/keyboard_bg"android:overScrollMode="never"></android.support.v7.widget.RecyclerView></LinearLayout>
RecyclerView 用来实现键盘布局,上面的 RelativeLayout 则是为了实现收起键盘的点击事件。
2. 在代码中实现键盘布局,填充数据、增加点击事件
我们新建类 KeyboardView 继承自 RelativeLayout,关联上面的布局文件,然后做一些初始化操作:对 RecyclerView 填充数据、设置适配器,设置出现和消失的动画效果,写一些会用到的方法等。
publicclassKeyboardViewextendsRelativeLayout{privateRelativeLayoutrlBack;privateRecyclerViewrecyclerView;privateList<String>datas;privateKeyboardAdapteradapter;privateAnimationanimationIn;privateAnimationanimationOut;publicKeyboardView(Contextcontext){this(context,null);}publicKeyboardView(Contextcontext,AttributeSetattrs){this(context,attrs,0);}publicKeyboardView(Contextcontext,AttributeSetattrs,intdefStyleAttr){super(context,attrs,defStyleAttr);init(context,attrs,defStyleAttr);}privatevoidinit(Contextcontext,AttributeSetattrs,intdefStyleAttr){LayoutInflater.from(context).inflate(R.layout.layout_key_board,this);rlBack=findViewById(R.id.rl_back);rlBack.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewview){//点击关闭键盘dismiss();}});recyclerView=findViewById(R.id.recycler_view);initData();initView();initAnimation();}//填充数据privatevoidinitData(){datas=newArrayList<>();for(inti=0;i<12;i++){if(i<9){datas.add(String.valueOf(i+1));}elseif(i==9){datas.add(".");}elseif(i==10){datas.add("0");}else{datas.add("");}}}//设置适配器privatevoidinitView(){recyclerView.setLayoutManager(newGridLayoutManager(getContext(),3));adapter=newKeyboardAdapter(getContext(),datas);recyclerView.setAdapter(adapter);}//初始化动画效果privatevoidinitAnimation(){animationIn=AnimationUtils.loadAnimation(getContext(),R.anim.keyboard_in);animationOut=AnimationUtils.loadAnimation(getContext(),R.anim.keyboard_out);}//弹出软键盘publicvoidshow(){startAnimation(animationIn);setVisibility(VISIBLE);}//关闭软键盘publicvoiddismiss(){if(isVisible()){startAnimation(animationOut);setVisibility(GONE);}}//判断软键盘的状态publicbooleanisVisible(){if(getVisibility()==VISIBLE){returntrue;}returnfalse;}publicvoidsetOnKeyBoardClickListener(KeyboardAdapter.OnKeyboardClickListenerlistener){adapter.setOnKeyboardClickListener(listener);}publicList<String>getDatas(){returndatas;}publicRelativeLayoutgetRlBack(){returnrlBack;}}
Adapter 里面都是很简单的代码,这里就不贴出了,文章末尾我会给出源码下载地址。
到这里为止,自定义数字键盘基本就算写好了,不过最重要的还是要和 Edittext 结合使用。
3. 与 Edittext 结合使用
1. 禁用系统软键盘
if(Build.VERSION.SDK_INT<=10){etInput.setInputType(InputType.TYPE_NULL);}else{getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);try{Class<EditText>cls=EditText.class;MethodsetShowSoftInputOnFocus=cls.getMethod("setShowSoftInputOnFocus",boolean.class);setShowSoftInputOnFocus.setAccessible(true);setShowSoftInputOnFocus.invoke(etInput,false);}catch(Exceptione){e.printStackTrace();}}
在网上找了一些方法,但是点击 Edittext 的时候系统软键盘依然会弹出。最后找到了这个方法,利用反射强制不弹出软键盘,效果不错。
2. 处理各个按键的点击事件
@OverridepublicvoidonKeyClick(Viewview,RecyclerView.ViewHolderholder,intposition){switch(position){case9://按下小数点Stringnum=etInput.getText().toString().trim();if(!num.contains(datas.get(position))){num+=datas.get(position);etInput.setText(num);etInput.setSelection(etInput.getText().length());}break;default://按下数字键if("0".equals(etInput.getText().toString().trim())){//第一个数字按下0的话,第二个数字只能按小数点break;}etInput.setText(etInput.getText().toString().trim()+datas.get(position));etInput.setSelection(etInput.getText().length());break;}}@OverridepublicvoidonDeleteClick(Viewview,RecyclerView.ViewHolderholder,intposition){//点击删除按钮Stringnum=etInput.getText().toString().trim();if(num.length()>0){etInput.setText(num.substring(0,num.length()-1));etInput.setSelection(etInput.getText().length());}}
到此,关于“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好?