单手笔记本键盘字母变数字猜一个数字

6792人阅读
笔记(21)
以前知道有个KeyboardView这个东西可以自定义键盘,但因为一直没涉及到,所以没研究过,今天看到工商银行密码输入的键盘觉得挺好看,就来研究一下。
先看一下工商银行的图
下边是我的效果图
两篇博客。
现在做一下笔记。
在需要显示键盘的布局中,插入这部分代码
android:keyBackground代表按键的背景
android:keyPreviewHeight按下后预览字符的高度
android:keyPreviewLayout按下后预览字符的布局(有默认的)
android:keyPreviewOffset偏移量,调整预览时显示的位置
android:id="@+id/rl_keyboard"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"&
android:id="@+id/keyboard_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#ECECEC"
android:focusable="true"
android:focusableInTouchMode="true"
android:keyBackground="@drawable/btn_keyboard_key"
android:keyPreviewHeight="100dp"
android:keyPreviewLayout="@layout/key_preview_layout"
android:keyPreviewOffset="50dp"
android:keyTextColor="#4F4F4F"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:shadowColor="#FFFFFF"
android:shadowRadius="0.0" /&
通过Keyboard说明是一个软键盘定义文件,Row元素说明这是一行按键的定义,Key元素说明这是一个按键的定义。Key元素通过一些属性来定义每个按键,下面是一些常用的属性介绍:
Codes:代表按键对应的输出值,可以为unicode值或则逗号(,)分割的多个值,也可以为一个字 符串。在字符串中通过“\”来转义特殊字符,例如 ‘\n’ 或则 ‘\uxxxx’ 。Codes通常用来定义该键的键码,例如上图中的数字按键1对应的为49;如果提供的是逗号分割的多个值则和普通手机输入键盘一样在多个值之间切换。
keyLabel:代表按键显示的文本内容。
keyIcon:代表按键显示的图标内容,如果指定了该值则在显示的时候显示为图片不显示文本。
keyWidth:代表按键的宽度,可以为精确值或则相对值,对于精确值支持多种单位,例如:像素,英寸 等;相对值为相对于基础取值的百分比,为以% 或则%p 结尾,其中%p表示相对于父容器。
keyHeight:代表按键的高度,取值同上。
horizontalGap:代表按键前的间隙(水平方向),取值同上。
isSticky:指定按键是否为sticky的。例如Shift大小写切换按键,具有两种状态,按下状态和正常状态,取值为true或则false。
isModifier:指定按键是否为功能键( modifier key ) ,例如 Alt 或则 Shift 。取值为true或则false。
keyOutputText:指定按键输出的文本内容,取值为字符串。
isRepeatable:指定按键是否是可重复的,如果长按该键可以触发重复按键事件则为true,否则为false。
keyEdgeFlags:指定按键的对齐指令,取值为left或则right。
首先在res下建xml文件夹,在文件夹下建字母,数字,符号三个xml文件。
字母键盘qwerty.xml
&?xml version="1.0" encoding="UTF-8"?&
xmlns:android="/apk/res/android"
android:horizontalGap="0.0px"
android:keyHeight="@dimen/key_height"
android:keyWidth="10.000002%p"
android:verticalGap="0.0px"&
android:codes="113"
android:keyEdgeFlags="left"
android:keyLabel="q" /&
android:codes="119"
android:keyLabel="w" /&
android:codes="101"
android:keyLabel="e" /&
android:codes="114"
android:keyLabel="r" /&
android:codes="116"
android:keyLabel="t" /&
android:codes="121"
android:keyLabel="y" /&
android:codes="117"
android:keyLabel="u" /&
android:codes="105"
android:keyLabel="i" /&
android:codes="111"
android:keyLabel="o" /&
android:codes="112"
android:keyEdgeFlags="right"
android:keyLabel="p" /&
android:codes="97"
android:horizontalGap="4.999995%p"
android:keyEdgeFlags="left"
android:keyLabel="a" /&
android:codes="115"
android:keyLabel="s" /&
android:codes="100"
android:keyLabel="d" /&
android:codes="102"
android:keyLabel="f" /&
android:codes="103"
android:keyLabel="g" /&
android:codes="104"
android:keyLabel="h" /&
android:codes="106"
android:keyLabel="j" /&
android:codes="107"
android:keyLabel="k" /&
android:codes="108"
android:keyEdgeFlags="right"
android:keyLabel="l" /&
android:codes="-1"
android:isModifier="true"
android:isSticky="true"
android:keyEdgeFlags="left"
android:keyIcon="@drawable/sym_keyboard_shift_normal"
android:keyWidth="14.999998%p" /&
android:codes="122"
android:keyLabel="z" /&
android:codes="120"
android:keyLabel="x" /&
android:codes="99"
android:keyLabel="c" /&
android:codes="118"
android:keyLabel="v" /&
android:codes="98"
android:keyLabel="b" /&
android:codes="110"
android:keyLabel="n" /&
android:codes="109"
android:keyLabel="m" /&
android:codes="-5"
android:isRepeatable="true"
android:keyEdgeFlags="right"
android:keyIcon="@drawable/sym_keyboard_delete"
android:keyWidth="14.999998%p" /&
android:rowEdgeFlags="bottom"&
android:codes="32"
android:isModifier="true"
android:isRepeatable="true"
android:keyEdgeFlags="left"
android:keyLabel="小侯子安全键盘"
android:keyWidth="74.999996%p" /&
android:codes="-4"
android:keyEdgeFlags="right"
android:keyLabel="完成"
android:keyWidth="25.000004%p" /&
数字键盘digit.xml
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
android:horizontalGap="0px"
android:keyHeight="@dimen/key_height"
android:keyWidth="33%p"
android:verticalGap="0px"&
android:codes="49"
android:keyLabel="1" /&
android:codes="50"
android:keyLabel="2" /&
android:codes="51"
android:keyLabel="3" /&
android:codes="52"
android:keyLabel="4" /&
android:codes="53"
android:keyLabel="5" /&
android:codes="54"
android:keyLabel="6" /&
android:codes="55"
android:keyLabel="7" /&
android:codes="56"
android:keyLabel="8" /&
android:codes="-5"
android:keyIcon="@drawable/sym_keyboard_delete" /&
android:codes="57"
android:keyLabel="9" /&
android:codes="48"
android:keyLabel="0" /&
android:codes="-4"
android:isRepeatable="true"
android:keyEdgeFlags="right"
android:keyLabel="完成" /&
符号键盘symbol.xml
&?xml version="1.0" encoding="UTF-8"?&
xmlns:android="/apk/res/android"
android:horizontalGap="0.0px"
android:keyHeight="@dimen/key_height"
android:keyWidth="10.000002%p"
android:verticalGap="0.0px"&
android:codes="91"
android:keyEdgeFlags="left"
android:keyLabel="[" /&
android:codes="93"
android:keyLabel="]" /&
android:codes="123"
android:keyLabel="{" /&
android:codes="125"
android:keyLabel="}" /&
android:codes="35"
android:keyLabel="#" /&
android:codes="37"
android:keyLabel="%" /&
android:codes="94"
android:keyLabel="^" /&
android:codes="42"
android:keyLabel="*" /&
android:codes="43"
android:keyLabel="+" /&
android:codes="61"
android:keyEdgeFlags="right"
android:keyLabel="=" /&
android:codes="95"
android:keyEdgeFlags="left"
android:keyLabel="_" /&
android:codes="45"
android:keyLabel="-" /&
android:codes="47"
android:keyLabel="/" /&
android:codes="58"
android:keyLabel=":" /&
android:codes="59"
android:keyLabel=";" /&
android:codes="40"
android:keyLabel="(" /&
android:codes="41"
android:keyLabel=")" /&
android:codes="36"
android:keyLabel="$" /&
android:codes="38"
android:keyLabel="&" /&
android:codes="64"
android:keyLabel="\@" /&
android:codes="46"
android:keyEdgeFlags="left"
android:keyLabel="." /&
android:codes="44"
android:keyEdgeFlags="right"
android:keyLabel="," /&
android:codes="63"
android:keyLabel="\?" /&
android:codes="33"
android:keyLabel="!" /&
android:codes="39"
android:keyLabel="'" /&
android:codes="92"
android:keyLabel="\\" /&
android:codes="124"
android:keyLabel="|" /&
android:codes="126"
android:keyLabel="~" /&
android:codes="-5"
android:isRepeatable="true"
android:keyEdgeFlags="right"
android:keyIcon="@drawable/sym_keyboard_delete"
android:keyWidth="20.000004%p" /&
android:rowEdgeFlags="bottom"&
android:codes="96"
android:keyLabel="`" /&
android:codes="60"
android:keyLabel="<" /&
android:codes="62"
android:keyLabel=">" /&
android:codes="8364"
android:keyLabel="EUR" /&
android:codes="163"
android:keyLabel="?" /&
android:codes="165"
android:keyLabel="?" /&
android:codes="34"
android:keyLabel=""" /&
android:codes="-4"
android:keyEdgeFlags="right"
android:keyLabel="完成"
android:keyWidth="30.000006%p" /&
有的符号在xml中不能直接写,可以用ASCII编码代替
k1 = new Keyboard(ctx, R.xml.qwerty)
k2 = new Keyboard(ctx, R.xml.digit)
k3 = new Keyboard(ctx, R.xml.symbol)
keyboardView = (KeyboardView) act.findViewById(R.id.keyboard_view)
rlKeyboard = (RelativeLayout) act.findViewById(R.id.rl_keyboard)
keyboardView.setKeyboard(k1)
keyboardView.setEnabled(true)
keyboardView.setPreviewEnabled(true)
keyboardView.setOnKeyboardActionListener(listener)
在onKey方法中做处理
private OnKeyboardActionListener listener = new OnKeyboardActionListener() {
public void onKey(int primaryCode, int[] keyCodes) {
Editable editable = ed.getText();
int start = ed.getSelectionStart();
if (primaryCode == Keyboard.KEYCODE_DONE) {
hideKeyboard();
} else if (primaryCode == Keyboard.KEYCODE_DELETE) {
if (editable != null && editable.length() & 0) {
if (start & 0) {
editable.delete(start - 1, start);
} else if (primaryCode == Keyboard.KEYCODE_SHIFT) {
changeKey();
keyboardView.setKeyboard(k1);
} else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
if (isnun) {
isnun = false;
keyboardView.setKeyboard(k1);
isnun = true;
randomdigkey();
keyboardView.setKeyboard(k2);
} else if (primaryCode == 57419) {
if (start & 0) {
ed.setSelection(start - 1);
} else if (primaryCode == 57421) {
if (start & ed.length()) {
ed.setSelection(start + 1);
editable.insert(start, Character.toString((char) primaryCode));
KeyboardUtil.java完整代码
package mon.
import android.app.A
import android.content.C
import android.content.res.R
import android.inputmethodservice.K
import android.inputmethodservice.Keyboard.K
import android.inputmethodservice.KeyboardV
import android.inputmethodservice.KeyboardView.OnKeyboardActionL
import android.media.AudioA
import android.os.V
import android.provider.S
import android.text.E
import android.view.V
import android.view.animation.AnimationU
import android.view.inputmethod.InputMethodM
import android.widget.EditT
import android.widget.RadioB
import android.widget.RadioG
import android.widget.RelativeL
import android.widget.TextV
import mon.R;
import mon.widget.SafeEditT
import java.util.ArrayL
import java.util.LinkedL
import java.util.L
import java.util.R
public class KeyboardUtil {
private KeyboardView keyboardV
private Keyboard k1;
private Keyboard k2;
private Keyboard k3;
public boolean isnun = false;
public boolean isupper = false;
private EditT
private RelativeLayout rlK
private TextView tvSystemK
private RadioGroup rgChangeK
private RadioButton rbDigit, rbLetter, rbS
public KeyboardUtil(Activity act, Context ctx, EditText edit) {
this.act =
this.ctx =
resources = ctx.getResources();
k1 = new Keyboard(ctx, R.xml.qwerty);
k2 = new Keyboard(ctx, R.xml.digit);
k3 = new Keyboard(ctx, R.xml.symbol);
keyboardView = (KeyboardView) act.findViewById(R.id.keyboard_view);
rlKeyboard = (RelativeLayout) act.findViewById(R.id.rl_keyboard);
keyboardView.setKeyboard(k1);
keyboardView.setEnabled(true);
keyboardView.setPreviewEnabled(true);
keyboardView.setOnKeyboardActionListener(listener);
rgChangeKeyboard = (RadioGroup) act.findViewById(R.id.rgChangeKeyboard);
tvSystemKeyboard = (TextView) act.findViewById(R.id.tvSystemKeyboard);
rbDigit = (RadioButton) act.findViewById(R.id.rb_digit);
rbLetter = (RadioButton) act.findViewById(R.id.rb_letter);
rbSymbol = (RadioButton) act.findViewById(R.id.rb_symbol);
tvSystemKeyboard.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
openKeyBoard();
rgChangeKeyboard.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.rb_digit) {
isnun = true;
randomdigkey();
keyboardView.setKeyboard(k2);
} else if (checkedId == R.id.rb_letter) {
isnun = false;
keyboardView.setKeyboard(k1);
} else if (checkedId == R.id.rb_symbol) {
keyboardView.setKeyboard(k3);
private OnKeyboardActionListener listener = new OnKeyboardActionListener() {
public void swipeUp() {
public void swipeRight() {
public void swipeLeft() {
public void swipeDown() {
public void onText(CharSequence text) {
public void onRelease(int primaryCode) {
public void onPress(int primaryCode) {
vibrate(20);
if (primaryCode == Keyboard.KEYCODE_SHIFT || primaryCode == Keyboard.KEYCODE_DELETE
|| primaryCode == Keyboard.KEYCODE_DONE || primaryCode == 32 || primaryCode == Keyboard.KEYCODE_MODE_CHANGE
|| (primaryCode &= 48 && primaryCode &= 57)) {
keyboardView.setPreviewEnabled(false);
keyboardView.setPreviewEnabled(true);
public void onKey(int primaryCode, int[] keyCodes) {
Editable editable = ed.getText();
int start = ed.getSelectionStart();
if (primaryCode == Keyboard.KEYCODE_DONE) {
hideKeyboard();
} else if (primaryCode == Keyboard.KEYCODE_DELETE) {
if (editable != null && editable.length() & 0) {
if (start & 0) {
editable.delete(start - 1, start);
} else if (primaryCode == Keyboard.KEYCODE_SHIFT) {
changeKey();
keyboardView.setKeyboard(k1);
} else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE) {
if (isnun) {
isnun = false;
keyboardView.setKeyboard(k1);
isnun = true;
randomdigkey();
keyboardView.setKeyboard(k2);
} else if (primaryCode == 57419) {
if (start & 0) {
ed.setSelection(start - 1);
} else if (primaryCode == 57421) {
if (start & ed.length()) {
ed.setSelection(start + 1);
editable.insert(start, Character.toString((char) primaryCode));
private void randomdigkey() {
List&Key& keyList = k2.getKeys();
List&Key& newkeyList = new ArrayList&Key&();
for (int i = 0; i & keyList.size(); i++) {
if (keyList.get(i).label != null
&& isNumber(keyList.get(i).label.toString())) {
newkeyList.add(keyList.get(i));
int count = newkeyList.size();
List&KeyModel& resultList = new ArrayList&KeyModel&();
LinkedList&KeyModel& temp = new LinkedList&KeyModel&();
for (int i = 0; i & i++) {
temp.add(new KeyModel(48 + i, i + ""));
Random rand = new Random();
for (int i = 0; i & i++) {
int num = rand.nextInt(count - i);
resultList.add(new KeyModel(temp.get(num).getCode(), temp.get(num)
.getLable()));
temp.remove(num);
for (int i = 0; i & newkeyList.size(); i++) {
newkeyList.get(i).label = resultList.get(i).getLable();
newkeyList.get(i).codes[0] = resultList.get(i).getCode();
keyboardView.setKeyboard(k2);
private boolean isNumber(String str) {
String wordstr = ".,";
if (wordstr.indexOf(str) & -1) {
return true;
return false;
* 键盘大小写切换
private void changeKey() {
List&Key& keylist = k1.getKeys();
if (isupper) {
isupper = false;
for (Key key : keylist) {
if (key.label != null && isword(key.label.toString())) {
key.label = key.label.toString().toLowerCase();
key.codes[0] = key.codes[0] + 32;
} else if (key.sticky && key.codes[0] == Keyboard.KEYCODE_SHIFT) {
key.icon = resources.getDrawable(R.drawable.sym_keyboard_shift_normal);
isupper = true;
for (Key key : keylist) {
if (key.label != null && isword(key.label.toString())) {
key.label = key.label.toString().toUpperCase();
key.codes[0] = key.codes[0] - 32;
} else if (key.sticky && key.codes[0] == Keyboard.KEYCODE_SHIFT) {
key.icon = resources.getDrawable(R.drawable.sym_keyboard_shift_press);
public void showKeyboard() {
hideKeyBoard();
if (this.ed instanceof SafeEditText) {
Settings.System.putInt(this.act.getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 0);
Settings.System.putInt(this.act.getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 1);
rbLetter.setChecked(true);
int visibility = rlKeyboard.getVisibility();
if (visibility == View.GONE || visibility == View.INVISIBLE) {
rlKeyboard.setVisibility(View.VISIBLE);
rlKeyboard.startAnimation(AnimationUtils.loadAnimation(this.act, R.anim.show_keyboard));
public void hideKeyboard() {
Settings.System.putInt(this.act.getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 1);
int visibility = rlKeyboard.getVisibility();
if (visibility == View.VISIBLE) {
rlKeyboard.setVisibility(View.INVISIBLE);
rlKeyboard.startAnimation(AnimationUtils.loadAnimation(this.act, R.anim.hide_keyboard));
private boolean isword(String str) {
String wordstr = "abcdefghijklmnopqrstuvwxyz";
if (wordstr.indexOf(str.toLowerCase()) & -1) {
return true;
return false;
* 打开软键盘
protected void openKeyBoard() {
hideKeyboard();
InputMethodManager imm = (InputMethodManager) this.ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
* 关闭软键盘
protected void hideKeyBoard() {
InputMethodManager inputMsg = (InputMethodManager) this.ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputMsg.isActive()) {
View curView = this.act.getCurrentFocus();
if (curView != null) {
inputMsg.hideSoftInputFromWindow(curView.getWindowToken(), 0);
* duration
protected void vibrate(long duration) {
Vibrator vibrator = (Vibrator) this.act.getSystemService(Context.VIBRATOR_SERVICE);
long[] pattern = {
0, duration
vibrator.vibrate(pattern, -1);
在activity中的使用:
edit = (EditText) this.findViewById(R.id.edit);
edit.setInputType(InputType.TYPE_NULL);
edit1 =(SafeEditText)this.findViewById(R.id.edit1);
edit.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int inputback = edit.getInputType();
new KeyboardUtil(act, ctx, edit).showKeyboard();
edit.setInputType(inputback);
return false;
edit1.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
edit1.setText("");
int inputback = edit1.getInputType();
edit1.setInputType(InputType.TYPE_NULL);
new KeyboardUtil(act, ctx, edit1).showKeyboard();
edit1.setInputType(inputback);
return false;
最后还剩下一个问题,空格键有效点击部分只有中间一块,两边点击无效,还没找到方法,找到后更新
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:29550次
排名:千里之外
原创:27篇
(6)(1)(1)(2)(3)(1)(1)(4)(7)(2)(7)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'不是右下角的数字区 是那一行数字~
指法键位如图:
但是并不一定要墨守成规,如果自己觉得效率高的话可以按照自己的指法去练习。
其他答案(共1个回答)
左手“食指”。以下是指法图:
要学五笔,首先要背字根,这是一定的.字根熟了以后再慢慢学拆字.其实背字根也不是没有窍门的,键盘26个大写字母,Z键没有字根,其它的每五个一个区,然后每个区的字根...
这个,就看单位自己的方法了。国家没有统一说法,单位自己说了算。据我所知,有的单位,每个月统一按30计算,日工资按工资数除以26(4天休息)计算。也有的单位按每个...
有很多啊,像搜狗拼音输入法,QQ拼音输入法,拼音加加搜狗拼音输入法:
你可以到天空软件站下载“五笔打字员”,最新版本是5.2,免费的,很好用,在练习打字的时候,能够显示你的打字速度。界面很美观。并附带下载王码五笔输入法86、98版...
答: 新年快乐!还有36天就要和宝贝见面了,祝福我吧,求准时发动!
答: 有线路由器和无线路由器应该是分开的,或者wlan被屏蔽了。
答: 炒股,买卖期货,开网络店铺。呵呵。。
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区计算机键盘为什么有两个数字区? | 问答 | 问答 | 果壳网 科技有意思
计算机键盘为什么有两个数字区?
+ 加入我的果篮
临床医学本科
字母上面那一排是用来简单打几个数字用的,包括拼音类的输入法选字也用得着。右边的小键盘区域的数字键用来输入大量数字用的。你看银行柜员敲账号,会计做账肯定都敲那里。
古典吉他控,通信工程专业
当你大量录入字母偶尔穿插几个数字的时候,双手主要停留在字母区,这时候用字母区上的数字键只需要移动手指而不需要移动手臂。大量录入数字时,字母区上的数字键横向排列过长,需要一只手来回移动或者两只手并用而且误操作多,这时候显然不如小键盘区方便......小键盘的设计非常适合单手快速操作,很多软件的常用快捷键也会选择设在小键盘区
高中退学,独立开发者,独立博客作者,深度 Git...
一个是技能,一个是背包
电脑键盘上都有的,在用户打字时可以使用上方的,用于输入数字和选择输入法候选项。小键盘是用来专门输入数字用的,例如计算时(四则运算号都有),有时候也作为游戏的快捷键,但是在笔记本上为了节约空间是没有的,可以使用一个单独的小键盘接上去。
后回答问题,你也可以用以下帐号直接登录
(C)2017果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:苹果iOS有一个隐藏的单手键盘_网易数码
苹果iOS有一个隐藏的单手键盘
用微信扫码二维码
分享至好友和朋友圈
(原标题:苹果iOS有一个隐藏的单手键盘)
摘要:开发人员Steve Troughton-Smith使用iOS模拟器,偶然发现了一个漂亮的单手键盘模式隐藏在iOS代码中,显然至少从iOS 8以来,这个单手键盘模式一直存在。编码器显示,这个秘密功能可以通过简单的边缘滑动激活。特别酷的是,你可以调整键盘大小以适合手掌大小。这个单手键盘还具有剪切,复制和粘贴功能,都可以通过单手完成。考虑到该功能是在iPhone 6和6 Plus时代加入iOS代码当中,外界推测该功能最初是使用户更容易在较大尺寸的6 Plus型号上输入文字。不过,为什么苹果决定隐藏该项功能,仍然是个迷。目前要使用这个单手键盘,用户必须越狱手中的iPhone,并通过一系列复杂设置。
本文来源:cnbeta网站
责任编辑:"王晓易_NE0011"
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈

我要回帖

更多关于 单独数字键盘 的文章

 

随机推荐