大概两年没写文章了,有些生疏,不知如何动笔,很早以前有过转行的想法,想过考公务员,所以重心不在程序上。近期通过内推的形式入职了一家大公司(社保公积金缴全额,双休,带薪十三天年假,少加班),这么好的福利加上这几年的颠沛流离让我有了稳定下来的想法,大概以后就专心写代码了吧。打工嘛,无非是多赚点钱,生活过得更好是吧,于是有了这篇分享,下面开始搬砖。

第一步:写布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:mtv="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:background="?attr/com_etnet_keyboard_bg"android:orientation="horizontal" ><LinearLayoutandroid:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="3"android:orientation="vertical" ><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="0dp"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:layout_marginTop="1dp"android:layout_weight="1" ><Buttonandroid:id="@+id/keyboard_1"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:minHeight="50dp"android:text="1"android:textColor="?attr/com_etnet_keypad_text" /><Buttonandroid:id="@+id/keyboard_2"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:layout_weight="1"android:minHeight="50dp"android:text="2"android:textColor="?attr/com_etnet_keypad_text" /><Buttonandroid:id="@+id/keyboard_3"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:minHeight="50dp"android:text="3"android:textColor="?attr/com_etnet_keypad_text" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="0dp"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:layout_marginTop="1dp"android:layout_weight="1" ><Buttonandroid:id="@+id/keyboard_4"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:minHeight="50dp"android:text="4"android:textColor="?attr/com_etnet_keypad_text" /><Buttonandroid:id="@+id/keyboard_5"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:layout_weight="1"android:minHeight="50dp"android:text="5"android:textColor="?attr/com_etnet_keypad_text" /><Buttonandroid:id="@+id/keyboard_6"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:minHeight="50dp"android:text="6"android:textColor="?attr/com_etnet_keypad_text" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="0dp"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:layout_marginTop="1dp"android:layout_weight="1" ><Buttonandroid:id="@+id/keyboard_7"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:minHeight="50dp"android:text="7"android:textColor="?attr/com_etnet_keypad_text" /><Buttonandroid:id="@+id/keyboard_8"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:layout_weight="1"android:minHeight="50dp"android:text="8"android:textColor="?attr/com_etnet_keypad_text" /><Buttonandroid:id="@+id/keyboard_9"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:minHeight="50dp"android:text="9"android:textColor="?attr/com_etnet_keypad_text" /></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="0dp"android:layout_marginBottom="1dp"android:layout_marginLeft="1dp"android:layout_marginRight="1dp"android:layout_marginTop="1dp"android:layout_weight="1" ><LinearLayoutandroid:layout_width="0dp"android:layout_weight="2"android:layout_height="match_parent"android:layout_marginRight="1dp"><Buttonandroid:id="@+id/keyboard_negative"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:layout_marginRight="1dp"android:visibility="gone"android:text="-"/><Buttonandroid:id="@+id/keyboard_0"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:minHeight="50dp"android:text="0"android:textColor="?attr/com_etnet_keypad_text" /></LinearLayout><Buttonandroid:id="@+id/keyboard_00"style="@style/com_etnet_keyboard_numbers"android:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:minHeight="50dp"android:text="00"android:textColor="?attr/com_etnet_keypad_text" /></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="fill_parent"android:layout_weight="1"android:layout_marginTop="1dp"android:layout_marginRight="1dp"android:layout_marginBottom="1dp"android:orientation="vertical" ><LinearLayoutandroid:id="@+id/keyboard_back"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1"android:background="?attr/com_etnet_keyboard_num_selector"android:gravity="center"android:minHeight="50dp" ><ImageViewandroid:id="@+id/keyboard_back_iv"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:scaleType="fitCenter"android:src="?attr/com_etnet_keyboard_back" /></LinearLayout><Buttonandroid:id="@+id/keyboard_search"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_marginTop="1dp"android:layout_weight="1"android:background="#FF007AFF"android:minHeight="50dp"android:text="@string/com_etnet_keyboard_search"android:textColor="@color/com_etnet_white" /></LinearLayout></LinearLayout>

第二步:相关样式资源

<style name="com_etnet_keyboard_numbers"><item name="android:textSize">20sp</item><item name="android:gravity">center</item><item name="android:background">?attr/com_etnet_keyboard_num_selector</item><item name="android:textStyle">bold</item></style>
<item name="com_etnet_keyboard_num_selector">@drawable/com_etnet_keyboard_num_selector</item>
<selector xmlns:android="http://schemas.android.com/apk/res/android" ><item android:state_pressed="true" ><color android:color="#DEE2E2"/></item><item ><color android:color="#F2F2F2"/></item>
</selector>

第三步:自定义View

public class ForexComparisonKeyboard extends PopupWindow {private View view;Button keyboard_btn1, keyboard_btn2, keyboard_btn3, keyboard_btn4,keyboard_btn5, keyboard_btn6, keyboard_btn7, keyboard_btn8,keyboard_btn9, keyboard_btn0, keyboard_btn_search, keyboard_btn00;LinearLayout keyboard_btn_back, porfolio_ll, keypad;public EditText focusEdit;private onTextChangeListener textChangeListener;public interface onTextChangeListener {void changeText(String text);}private onCloseListener closelistener;public interface onCloseListener {void close();}public void setOnTextEditListener(onTextChangeListener listener) {this.textChangeListener = listener;}@SuppressLint("WrongViewCast")public ForexComparisonKeyboard(RefreshContentFragment f, EditText fEdit, onCloseListener listener) {focusEdit = fEdit;closelistener = listener;view = LayoutInflater.from(CommonUtils.curActivity).inflate(R.layout.com_etnet_porfolio_keyboard, null);setContentView(view);disableShowInput(fEdit);this.setWidth(LayoutParams.MATCH_PARENT);this.setHeight(LayoutParams.WRAP_CONTENT);porfolio_ll = (LinearLayout) view.findViewById(R.id.add2por);keypad = (LinearLayout) view.findViewById(R.id.keypad);keypad.getLayoutParams().height = CommonUtils.screenHeight / 3;keyboard_btn1 = (Button) view.findViewById(R.id.keyboard_1);keyboard_btn2 = (Button) view.findViewById(R.id.keyboard_2);keyboard_btn3 = (Button) view.findViewById(R.id.keyboard_3);keyboard_btn4 = (Button) view.findViewById(R.id.keyboard_4);keyboard_btn5 = (Button) view.findViewById(R.id.keyboard_5);keyboard_btn6 = (Button) view.findViewById(R.id.keyboard_6);keyboard_btn7 = (Button) view.findViewById(R.id.keyboard_7);keyboard_btn8 = (Button) view.findViewById(R.id.keyboard_8);keyboard_btn9 = (Button) view.findViewById(R.id.keyboard_9);keyboard_btn0 = (Button) view.findViewById(R.id.keyboard_0);keyboard_btn00 = (Button) view.findViewById(R.id.keyboard_00);CommonUtils.setTextSize(keyboard_btn1, 18);CommonUtils.setTextSize(keyboard_btn2, 18);CommonUtils.setTextSize(keyboard_btn3, 18);CommonUtils.setTextSize(keyboard_btn4, 18);CommonUtils.setTextSize(keyboard_btn5, 18);CommonUtils.setTextSize(keyboard_btn6, 18);CommonUtils.setTextSize(keyboard_btn7, 18);CommonUtils.setTextSize(keyboard_btn8, 18);CommonUtils.setTextSize(keyboard_btn9, 18);CommonUtils.setTextSize(keyboard_btn0, 18);CommonUtils.setTextSize(keyboard_btn00, 18);keyboard_btn00.setText(".");keyboard_btn_back = (LinearLayout) view.findViewById(R.id.keyboard_back);keyboard_btn_search = (Button) view.findViewById(R.id.keyboard_search);CommonUtils.setTextSize(keyboard_btn_search, 20);Button[] numbtn = {keyboard_btn0, keyboard_btn1, keyboard_btn2,keyboard_btn3, keyboard_btn4, keyboard_btn5, keyboard_btn6,keyboard_btn7, keyboard_btn8, keyboard_btn9};for (int i = 0; i < numbtn.length; i++) {final int j = i;numbtn[i].setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (focusEdit != null) {focusEdit.append(String.valueOf(j));if (!focusEdit.hasFocus()) {focusEdit.requestFocus();}}}});}keyboard_btn00.setOnClickListener(onclick);keyboard_btn_back.setOnClickListener(onclick);keyboard_btn_search.setOnClickListener(onclick);keyboard_btn_search.setText(CommonUtils.getString(R.string.com_etnet_keyboard_search));porfolio_ll.setVisibility(View.GONE);}OnClickListener onclick = new OnClickListener() {@Overridepublic void onClick(View v) {int id = v.getId();if (id == R.id.keyboard_search) {//搜索if (textChangeListener != null) {textChangeListener.changeText(focusEdit.getText().toString());}} else if (id == R.id.keyboard_back) {//退格按钮if (focusEdit == null) return;int st = focusEdit.getSelectionStart();int end = focusEdit.getSelectionEnd();if (st == end) {if (st > 0) {focusEdit.getText().delete(st - 1, end);}} else {focusEdit.getText().delete(st, end);}} else if (id == R.id.keyboard_00) {//小数点String tag = keyboard_btn00.getText().toString();if (tag.equals(".")) {String str = focusEdit.getText().toString();if (!str.contains(".")) {if (focusEdit != null) {focusEdit.append(tag);if (!focusEdit.hasFocus()) {focusEdit.requestFocus();}}}}}}};/*** 禁掉系统键盘,但要显示光标** @param editText*/public void disableShowInput(EditText editText) {if (android.os.Build.VERSION.SDK_INT <= 10) {editText.setInputType(InputType.TYPE_NULL);} else {Class<EditText> cls = EditText.class;Method method;try {method = cls.getMethod("setShowSoftInputOnFocus", boolean.class);method.setAccessible(true);method.invoke(editText, false);} catch (Exception e) {//TODO: handle exception}try {method = cls.getMethod("setSoftInputShownOnFocus", boolean.class);method.setAccessible(true);method.invoke(editText, false);} catch (Exception e) {//TODO: handle exception}}editText.setTextIsSelectable(false);//禁止复制粘贴等操作editText.setLongClickable(false);}public void show(View parent) {showAtLocation(parent, Gravity.BOTTOM, 0, 0);}
}

第四步:代码中调用

 //初始化,input是你要操作的EditTextmKeyboard = new ForexComparisonKeyboard(this, input, new ForexComparisonKeyboard.onCloseListener() {@Overridepublic void close() {showEditMode();}});//获取焦点,解决EditText第一次点击无响应mKeyboard.focusEdit.requestFocus();// 设置PopupWindow点击外部消失mKeyboard.setOutsideTouchable(true);mKeyboard.setTouchable(true);mKeyboard.setOnTextEditListener(new ForexComparisonKeyboard.onTextChangeListener() {@Overridepublic void changeText(String text) {Log.e("changeText==",text);showEditMode();}});//关闭对话框private void showEditMode() {if (mKeyboard.isShowing()) {mKeyboard.dismiss();}}//响应back事件@Overridepublic boolean onBackPressed() {if (mKeyboard != null & mKeyboard.isShowing()) {mKeyboard.dismiss();}return true;}//调用mKeyboard.show(getView());

效果图:

Android 自定义数字虚拟键盘相关推荐

  1. android 自定义数字软键盘,Android自定义键盘的实现(数字键盘和字母键盘)

    在项目中,产品对于输入方式会有特殊的要求,需要对输入方式增加特定的限制,这就需要采用自定义键盘.本文主要讲述数字键盘和字母键盘的自定义实现. 自定义键盘的实现步骤如下: 自定义CustomKeyboa ...

  2. Android 自定义安全软键盘 SafeKeyboard 开发详细说明 2.0

    Android 自定义安全软键盘 SafeKeyboard 开发详细说明 2.0 源码地址:GitHub:    https://github.com/SValence/SafeKeyboard 注意 ...

  3. Android实例-解决虚拟键盘遮挡问题(XE8+小米2)

    Android实例-解决虚拟键盘遮挡问题(XE8+小米2) 参考文章: (1)Android实例-解决虚拟键盘遮挡问题(XE8+小米2) (2)https://www.cnblogs.com/FKde ...

  4. java数字时钟代码,Android自定义数字时钟代码,android自定义时钟,package jp.t

    Android自定义数字时钟代码,android自定义时钟,package jp.tpackage jp.tsmsogn.digitalclock;import java.util.Calendar; ...

  5. android 无法隐藏键盘,我无法在Android上隐藏虚拟键盘

    我正在使用支持库处理片段和嵌套片段.我无法在Android上隐藏虚拟键盘 我有一个场景,我从现有的片段中添加一个新的片段(其中包含一个EditText).当用户点击EditText时,会显示一个虚拟键 ...

  6. android自定义数字键盘和字母键盘,Android自定义键盘的实现(数字键盘和字母键盘)...

    Android自定义键盘的实现(数字键盘和字母键盘) 发布时间:2020-09-04 03:18:48 来源:脚本之家 阅读:100 作者:浪淘沙xud 在项目中,产品对于输入方式会有特殊的要求,需要 ...

  7. android 数字圆环,Android 自定义数字圆环

    最近项目中写了一个数字圆环的样式,只能通过自定义View完成,对于自定义View我还比较薄弱,查了一些资料,我们参考下: http://www.jianshu.com/p/84df2466e26a h ...

  8. android 虚拟键 高度,Android,获取虚拟键盘的高度

    在很多时候,很多需求下,我们都需要得知键盘的高度啊!实在不能理解为什么安卓不提供这样方便的API.虽然没有很好的监听事件,但是我们还是可以制造一个的.想想虚拟键盘弹起来之后界面发生了什么变化?对的,有 ...

  9. Android 自定义数字角标

    需要显示购物车数量,网上看了一些实现方式,有的是通过把页面view控件作为子view添加的,但是会改变我已有的样式和操作,因此决定自己编写 实现显示角标的功能. 我这里的需求是使用FloatingAc ...

最新文章

  1. 基于ThinkPHP的在线编辑器调用
  2. VMware下桥接设置
  3. AtCoder AGC038D Unique Path (图论)
  4. call_once/once_flag的使用
  5. 机器学习基础图表:概念、原理、历史、趋势和算法
  6. Syslink Control使用技巧
  7. 设置 webbrowser 控件的表现形式,可以像你本机的IE浏览器一样
  8. 麒麟990 5G获外媒好评:华为Mate30系列有望引领5G时代新体验
  9. P3707 [SDOI2017]相关分析
  10. 新萝卜家园 GhostXP_SP3 五一纪念版
  11. 新宝解读大盘单边攀升突破3600点 大金融崛起
  12. Unity XR Interaction Toolkit 组件解析(一)Action-based 和 Device-based 的区别
  13. 项目管理知识体系指南(五)项目时间管理
  14. EDIUS中的图片该如何进行剪裁
  15. Python格式化新年祝福语
  16. 搞懂这 9 个步骤,DNS 访问原理就明明白白了
  17. 电商小学期 - 智能家居网站结项报告
  18. QT入门Input Widgets之QFontComboBox、QTextEdit、QPlainTextEdit、QDial、QKeySequenceEdit
  19. Swift - UITableView
  20. 基于VMware虚拟机安装Ubuntu

热门文章

  1. 金吧台台球计费系统会员导出教程
  2. 字体大宝库:20款充满艺术感的高质量英文字体
  3. 长期失眠会有哪些影响?
  4. 一键添加相关的零件和特征,SOLIDWORKS这个功能你值得拥有!
  5. 聊一聊小游戏运营的三大分发平台
  6. 企业邮箱购买指南:分享如何购买适合企业的企业邮箱
  7. 自动化用例设计思路学习小记
  8. Shell监控Gitlab备份并且通过邮件通
  9. IPv6地址结构、地址分类以及表示方法
  10. cookie,sessionStorage 和 localStorage 的区别 cookie弊端