{"id":13814374,"url":"https://github.com/parkingwang/vehicle-keyboard-android","last_synced_at":"2026-02-24T08:57:21.662Z","repository":{"id":45214373,"uuid":"109940461","full_name":"parkingwang/vehicle-keyboard-android","owner":"parkingwang","description":"停车王车牌键盘-Android","archived":false,"fork":false,"pushed_at":"2020-12-11T07:11:00.000Z","size":4724,"stargazers_count":655,"open_issues_count":20,"forks_count":150,"subscribers_count":19,"default_branch":"master","last_synced_at":"2024-08-04T04:05:36.477Z","etag":null,"topics":["keyboard","parkingwang","plate-number","vehicle","vpl"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/parkingwang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-08T07:08:26.000Z","updated_at":"2024-07-05T00:38:25.000Z","dependencies_parsed_at":"2022-09-24T08:40:14.423Z","dependency_job_id":null,"html_url":"https://github.com/parkingwang/vehicle-keyboard-android","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkingwang%2Fvehicle-keyboard-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkingwang%2Fvehicle-keyboard-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkingwang%2Fvehicle-keyboard-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parkingwang%2Fvehicle-keyboard-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parkingwang","download_url":"https://codeload.github.com/parkingwang/vehicle-keyboard-android/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225326464,"owners_count":17456946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["keyboard","parkingwang","plate-number","vehicle","vpl"],"created_at":"2024-08-04T04:01:55.294Z","updated_at":"2026-02-24T08:57:21.620Z","avatar_url":"https://github.com/parkingwang.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# 停车王车牌键盘 VehicleKeyboard - Android\n\n`VehicleKeyboard`是停车王品牌的各端产品线的基础组件，专为提高中国车牌号码输入速度而定制开发的专用键盘组件。\n为停车行业的用户输入车牌号码，提供非常便捷有效的输入方式。\n\n包括以下三个项目：\n\n- `Android` Android项目，为Android客户端定制包括输入组件、键盘组件及相关控制逻辑实现；\n- `iOS` iOS客户端项目，为iOS客户端定制包括输入组件、键盘组件及相关控制逻辑实现；\n- `JavaScript(Vue.js)` JavaScript(Vue.js)项目，为H5页面定制，包括Web、微信、支付宝等，同样包括输入组件、键盘组件及相关控制逻辑实现\n\n## 零、项目主页\n\n### Android 版本\n- [GitHub项目主页](https://github.com/parkingwang/vehicle-keyboard-android)\n- [OSChina项目主页](https://gitee.com/iRainIoT/vehicle-keyboard-android)\n\n### iOS 版本\n- [GitHub项目主页](https://github.com/parkingwang/vehicle-keyboard-ios)\n- [OSChina项目主页](https://gitee.com/iRainIoT/vehicle-keyboard-ios)\n\n### JavaScript Vue.js 版本\n- [GitHub项目主页](https://github.com/parkingwang/vehicle-keyboard-js)\n- [OSChina项目主页](https://gitee.com/iRainIoT/vehicle-keyboard-js)\n\n### 兼容性声明\n\n**注意：**\n当前版本v0.5，已修改为Java原生实现键盘逻辑，不再使用Javascript。项目包结构已发生重大修改，不再向0.4及以下版本兼容。\n\n![Gif](./pwk_keyboard_usage.gif)\n\n### 支持输入车牌类型\n\n支持中华人民共和国现行绝大部分车牌号码类型：\n\n1. 民用蓝牌、黄牌；\n2. 新能源车牌；\n3. 港澳车牌；\n4. 武警车牌；\n5. 军队车牌；\n6. 新旧大使馆车牌；\n7. 新旧领事馆车牌；\n8. 民航车牌；\n\n## 一、添加到项目\n\n增加仓库地址：\n\n```groovy\nrepositories {\n    jcenter()\n}\n```\n\n添加库依赖：\n\n```groovy\nimplementation 'com.parkingwang:keyboard:0.7.3'\n// OR\ncompile 'com.parkingwang:keyboard:0.7.3'\n```\n\n## 二、使用组件\n\n**注意：**有问题请先查看 [FAQ][1] 及搜索 [issue][2]。\n\n### 2.1 车牌号码输入组件 InputView\n\n![](./PWK_INPUT_VIEW.png)\n\nInputView是用于手动输入车牌的组件，提供7-8个用户可选择修改的输入框，如上图所示。\n\n在XML中放置输入组件：\n\n```xml\n\n    \u003ccom.parkingwang.keyboard.view.InputView\n        android:id=\"@+id/input_view\"\n        app:pwkInputTextSize=\"22sp\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"60dp\"/\u003e\n\n```\n\n### 2.2 车牌号码键盘组件 - KeyboardView\n\n![](./pwk_keyboard_view_01.png)\n![](./pwk_keyboard_view_02.png)\n\nKeyboardView是车牌输入键盘组件，提供按车牌类型显示一定规则的键盘布局供用户点击，如上图所示。\n\n在XML中放置键盘组件：\n\n```xml\n    \u003ccom.parkingwang.keyboard.view.InputView\n            android:id=\"@+id/input_view\"\n            android:layout_margin=\"6dp\"\n            app:pwkInputTextSize=\"22sp\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"60dp\"/\u003e\n```\n\n### 2.3 输入框和键盘控制器 - KeyboardInputController\n\n在代码中绑定输入组件与键盘的关联：\n\n**使用弹出键盘**\n\n详见 MainActivity 的演示代码。见地址：[](./app/src/main/java/com/parkingwang/vehiclekeyboard/demo/MainActivity.java)\n\n```java\n// Init Views\n\n// 创建弹出键盘\nmPopupKeyboard = new PopupKeyboard(this);\n// 弹出键盘内部包含一个KeyboardView，在此绑定输入两者关联。\nmPopupKeyboard.attach(mInputView, this);\n\n// KeyboardInputController提供一个默认实现的新能源车牌锁定按钮\nmPopupKeyboard.getController()\n        .setDebugEnabled(true)\n        .bindLockTypeProxy(new KeyboardInputController.ButtonProxyImpl(lockTypeButton) {\n            @Override\n            public void onNumberTypeChanged(boolean isNewEnergyType) {\n                super.onNumberTypeChanged(isNewEnergyType);\n                if (isNewEnergyType) {\n                    lockTypeButton.setTextColor(getResources().getColor(android.R.color.holo_green_light));\n                } else {\n                    lockTypeButton.setTextColor(getResources().getColor(android.R.color.black));\n                }\n            }\n        });\n```\n\n**不弹出键盘，直接显示**\n\n```java\n\n// 使用 KeyboardInputController 来关联\nmController = KeyboardInputController\n                    .with(mKeyboardView, inputView);\n\nmController.useDefaultMessageHandler();\n```\n\n**切换新能源和普通车牌是否校验**\n\n```java\nmController.setSwitchVerify(false) //不校验（默认校验）\n```\n\n## 三、键盘功能特性设置\n\n### 3.1 设置是否显示“确定”键\n\n根据需要，你可以通过调用KeyboardEngine的`setHideOKKey(boolean)`来设置是否隐藏“确定”键。\n\n```java\nmPopupKeyboard.getKeyboardEngine().setHideOKKey(mHideOKKey);\n```\n\n### 3.2 优先显示周边省份\n\n根据需要，在不同地区的用户，输入车牌号码时，可以根据当地地理位置，显示周边省份的简称。\n获取地理位置需要的定位功能，需要你外部调用定位API，获取到对应的省份名称后，设置到KeyboardEngine中。\n使用如下代码：\n\n```java\nmPopupKeyboard.getKeyboardEngine().setLocalProvinceName(\"广东省\");\n```\n\n### 3.3 设置键盘按下时的气泡：\n\n1. 正确地显示气泡\n\n由于顶层按键的气泡会显示到键盘之外，因此需要键盘所在的父布局增加以下属性（如果气泡范围超出父布局，则需往上递归设置）：\n\n```xml\n    android:clipChildren=\"false\"\n```\n\n2. 不显示气泡\n\n```java\n    mKeyboardView.setShowBubble(false);\n```\n\n\n## 四、键盘样式设置\n\n### 4.1 设置键盘按钮文字大小\n\n在Java代码中添加以下设置：\n```java\n    mKeyboardView.setCNTextSize(float); //设置中文字体大小\n    mKeyboardView.setENTextSize(float); //设置英文字母或数字字体大小\n```\n\n### 4.2 设置键盘主题颜色\n\n在colors.xml中覆盖以下颜色值以修改键盘主题色\n```xml\n    \u003ccolor name=\"pwk_primary_color\"\u003e#418AF9\u003c/color\u003e\n    \u003c!--确定按键按下时的颜色--\u003e\n    \u003ccolor name=\"pwk_primary_dark_color\"\u003e#3A7CE0\u003c/color\u003e\n```\n### 4.3 设置输入组件字体大小：\n\n```xml\n    \u003ccom.parkingwang.keyboard.view.InputView\n            app:pwkInputTextSize=\"22sp\"\n            ..../\u003e\n```\n\n### 4.4 设置输入组件的样式\n\n默认提供两种输入组件样式：\n\n#### 4.4.1. 混合紧排样式（默认样式） - MIXED\n\n![](./PWK_INPUT_MIXED_STYLE.png)\n\n```xml\n    \u003c!--输入框按键样式，最左最右键样式设置--\u003e\n    \u003cstyle name=\"PWKInputItemStyleKey\" parent=\"PWKInputItemStyle_BORDER_KEY\"/\u003e\n    \u003c!--输入框外部样式--\u003e\n    \u003cstyle name=\"PWKInputViewStyle\" parent=\"PWKInputViewStyle_MIXED\"/\u003e\n```\n\n#### 4.4.2. 分隔块状样式 - DIVIDED\n\n![](./PWK_INPUT_DIVIDED_STYLE.png)\n\n```xml\n    \u003c!--输入框按键样式，最左最右键样式设置--\u003e\n    \u003cstyle name=\"PWKInputItemStyleKey\" parent=\"PWKInputItemStyle_FILLED_KEY\"/\u003e\n    \u003c!--输入框外部样式--\u003e\n    \u003cstyle name=\"PWKInputViewStyle\" parent=\"PWKInputViewStyle_DIVIDED\"/\u003e\n\n```\n\n在项目的`styles.xml`中覆盖设置以上两种样式配置，可以切换显示不同的样式。可参考 App 的配置代码。\n\n### 4.5 如何修改自己的样式\n\n覆盖`PWKInputItemStyleKey / PWKInputItemStyleLeft / PWKInputItemStyleRight`和`PWKInputViewStyle`来实现。\n\n- `PWKInputItemStyleKey` 控制输入组件内每个输入框的按键Button样式，样式作用于每个Button；\n- `PWKInputViewStyle` 控制输入组件的整体样式，作用于LinearLayout；\n\n#### 4.5.1 InputView的样式选项\n\n**注意**\n最新版本需要配置 `InputView` 的 `style`。配置方法有以下两种：\n\n在布局文件中为 `InputView` 添加以下属性：\n\n```\n    style=\"@style/PWKInputViewStyle\"\n```\n或者是在 `Application` 或 `Activity` 所配置的 `theme` 的 `style` 中添加配置（参考 demo 项目）：\n\n```\n    \u003citem name=\"pwkInputStyle\"\u003e@style/PWKInputViewStyle\u003c/item\u003e\n```\n\n**常规配置**\n\n通过覆盖以下样式配置，可以修改默认样式\n\n```xml\n\n    \u003c!--输入框外边框宽度--\u003e\n    \u003cdimen name=\"pwk_input_view_border_width\"\u003e0.7pt\u003c/dimen\u003e\n    \u003c!--背景缩进，必须与pwk_input_view_border_width保持一致，并且为负值--\u003e\n    \u003cdimen name=\"pwk_input_view_border_width_inset\"\u003e-0.7pt\u003c/dimen\u003e\n    \u003c!--输入框分割线的宽度，在混合组件中使用--\u003e\n    \u003cdimen name=\"pwk_input_view_divider_split_line\"\u003e@dimen/pwk_input_view_border_width\u003c/dimen\u003e\n    \u003c!--输入框分割空间的距离，在分离组件样式中使用--\u003e\n    \u003cdimen name=\"pwk_input_view_divider_split_space\"\u003e5dp\u003c/dimen\u003e\n    \u003c!--输入框选中状态的边框宽度，在混合组件中使用--\u003e\n    \u003cdimen name=\"pwk_input_item_highlight_border_width\"\u003e1.2pt\u003c/dimen\u003e\n    \u003c!--输入框圆角--\u003e\n    \u003cdimen name=\"pwk_input_item_radius\"\u003e4dp\u003c/dimen\u003e\n    \u003c!--输入框字体大小--\u003e\n    \u003cdimen name=\"pwk_input_item_text_size\"\u003e24sp\u003c/dimen\u003e\n\n```\n\n### 4.5.2 如何自定义输入框的选中样式\n\n1. 继承 `SelectedDrawable` 并重写 `public void draw(@NonNull Canvas canvas)` 方法自己绘制选中效果。\n2. 然后将该类配置到 `InputView` 的 `app:pwkSelectedDrawable` 属性或其 `style` 中，如下所示：\n\n```\n    \u003citem name=\"pwkSelectedDrawable\"\u003ecom.parkingwang.keyboard.view.SelectedDrawable\u003c/item\u003e\n```\n\n## 五、停车王车牌键盘布局切换逻辑\n\n### 5.1 DOC文档\n\n[DOC文档](https://parkingwang.github.io/vehicle-keyboard-android/)\n\n### 5.2 停车王车牌键盘布局切换逻辑\n\n停车王车牌键盘布局切换逻辑的思维导图，说明了当前版本的键盘布局的切换，以及“更多”、“返回”按钮的切换逻辑。\n\n![停车王车牌键盘布局切换逻辑](./pwk_layout_logic.png)\n\n[百度脑图地址](http://naotu.baidu.com/file/3f07c764a7a4e6b146a827ec56b9a059?token=9ea43f483a785175)\n\n## 六、版本更新\n\n### v0.7.6 2020.12.11\n\n- 武警车牌号第三位放开字母输入限制\n\n### v0.7.5 2020.06.03\n\n- 普通车牌放开第二位数字输入限制\n\n### v0.7.4 2019.11.27\n\n- 修改新能源车牌号输入及校验规则\n\n### v0.7.3 2019.3.25\n\n- 添加了新能源和普通车牌是否需要规则校验控制选项\n\n### v0.7.1 2018.11.05\n\n- 兼容 Android P 导航栏\n\n### v0.7 2018.09.19\n\n- 增加动态设置气泡、按键主题色的方法\n\n### v0.6.1 2018.08.02\n\n- 修复在4.4.2上选择框位置不正确的问题\n\n### v0.6.0 2018.07.24\n\n- 重写选中样式的实现，使用更灵活的 Drawable 类来实现绘制选中样式，并解决原来设置背景来实现选中样式的局限。\n- 修改 InputView 的布局，去掉原来为实现选中样式而另外添加的一个 Button。\n- pwk_input_view 根标签改为 \u003cmerge\u003e\u003c/merge\u003e，减少层级。注意：此修改将影响使用配置，相关说明见 README.md 的第 4.5.1 条“InputView 的样式选项”一节。\n- 原来对输入位是否显示的判断由 isShown() 改为 getVisibility() == View.VISIBLE，以解决在界面未显示时判断不正确的问题。\n- Fixes #19\n\n### v0.5.5 2018.07.02\n\n- 移除HK_MACAO车牌类型；\n- 仅当车牌\"粤\"字头时，才可以选择\"港澳\"汉字；\n\n### v0.5.3 2018.06.15\n\n\u003e 说明：在此版本中，发生架构和项目结构的重大修改，不向下兼容，请按照当前版本的使用说明来修改；\n\n- 使用Java原生键盘引擎，替代原JavaScript。\n- 删除KeyboardType类型，不再需要配置键盘类型，本版本支持所有类型车牌；\n- 增加全类型车牌支持，增加“更多”和“返回”来切换键盘布局；\n- 优化InputView内部逻辑，简化其实现代码；\n- 优化整体操作性能，键盘输入更多流畅了；\n- 增加周边省份功能设定；\n\n### v0.4.0 2018.0424\n\n\u003e 说明：在此版本中，如果使用`com.parkingwang.keyboard.support.KeyboardInputController`包的相关类，\n\u003e 会报告Deprecated,使用`com.parkingwang.keyboard.KeyboardInputController`包的类即可。\n\n- 更新KeyboardInputController及相关类的包结构；\n- 增加Controller各个Set和Add接口的NullPointer检查；\n\n### v0.3-ALPHA 2017.1120\n\n- 修复Texts关于字符判断的问题；\n- 更新Gradle版本为3.3.0；\n- 更新JS文件(JS压缩)；\n- 全键盘模式下，增加“民航”车牌类型；\n- 修改KeyboardView每行键位数的基准为第一行；\n\n### v0.2-ALPHA 2017.1113\n\n- 修改键盘组件主题颜色的控制逻辑，原有的`pwk_keyboard_primary_color`修改为`pwk_primary_color`，并作为整个键盘的主题色。\n- 为输入框不同键位的增加控制主题。`PWKInputItemStyleKey / PWKInputItemStyleLeft / PWKInputItemStyleRight`。\n\n### v0.1-BETA 2017.1108\n\n- 完成基础功能，更新文档并公开发布；\n\n## Contributors\n\n[VehicleKeyboard-Android](https://github.com/parkingwang/vehicle-keyboard-android)\n由西安艾润物联网技术服务有限公司第一事业部深圳研发中心开发和维护，旨在与停车行业同行进行技术交流和分享。\n\n## 疑问与交流\n\n[1]: https://github.com/parkingwang/vehicle-keyboard-android/blob/master/FAQ.md\n[2]: https://github.com/parkingwang/vehicle-keyboard-android/issues\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparkingwang%2Fvehicle-keyboard-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparkingwang%2Fvehicle-keyboard-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparkingwang%2Fvehicle-keyboard-android/lists"}