扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
首先,保证手机已经ROOT,并且安装了RE文件管理器,先用RE管理器打开system\usr\keylayout下的文件s3c-keypad.kl(以文本编辑方式打开),在目录中不同的数字对应不同的功能,看好原先对应的功能,在将数字按照喜欢的风格进行重新编写:
十多年的团风网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整团风建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“团风网站设计”,“团风网站推广”以来,每个客户项目都认真落实执行。
1.
116代表锁屏键
2.
102代表宝石键
3.
231代表拨号键
4.
217代表相机上面的键
5.
26代表挂机键
6.
115代表音量+
7.
114代表音量-
8.
158代表相机键
9.
改完立刻重启就OK了。
DecorView →PhoneWindow →Activity→ViewGroup→view
下面我们根据按键事件的分发流程,抽丝剥茧,逐一分析。
private int processKeyEvent(QueuedInputEvent q)
1、DecorView.java
2、Activity.java
3、ViewGroup.java
4、View.java
通过该方法,接收器receiver的onKeyDown、onKeyUp、onKeyLongPress、onKeyMultiple等方法将被回调。
在上述按键事件的入口中提到的ViewRootImpl中
如果mView.dispatchKeyEvent(event)返回true,则结束事件分发;
如果返回false,则调用如下方法
继续执行后续的焦点导航流程。
焦点导航的总体流程就是:
1、View focused = mView.findFocus();//从视图树的顶层,即DecorView一层一层的递归查找当前获得焦点的view
2、View v = focused.focusSearch(direction);根据导航的方向查找下一个可获取焦点的view
3、v.requestFocus(direction, mTempRect)请求获取焦点
4、v.requestFocus(direction,mTempRect)内部,调用mParent.requestChildFocus(this, focused)逐层递归向上级通知
ViewRootImpl.java
mView即DecorView,从DecorView开始,一层一层的向下递归查找当前获得焦点的view
找到了当前获得焦点的focused,调用该焦点view的focusSearch(direction)方法查找direction方向上下一个将要获取焦点的view。
focused.focusSearch(direction)实际上会调用mParent.focusSearch(this, direction)方法,层层递归,直到调用到DecorView的focusSearch(this, direction)方法。
而DecorView继承ViewGroup,实际上最终会调用到FocusFinder.getInstance().findNextFocus(this, focused, direction),this 就是DecorView对象。
最终会调用到DecorView父类ViewGroup中的FocusFinder.getInstance().findNextFocus(this, focused, direction);
ViewGroup.java
FocusFinder.java
搜索到下一个获取焦点的view后,调用该view.requestFocus(direction, mTempRect)方法
注意:调用requestFocus(direction, mTempRect)需要区分调用者。
如果是ViewGroup,则会更加焦点获取策略,实现父View和子View之间获取焦点的优先级。
如下是ViewGroup.java 和View.java 中requestFocus方法是实现:
ViewGroup.java
View.java
View获取到焦点后,会调用mParent.requestChildFocus(this, focused)逐层递归向上级通知
ViewGroup.java
Android自定义键盘的使用
1、新建一个xml文件夹放在res目录下面,然后新建xml文件:money_keyboard.xml
2、然后在XML文件中添加按钮布局,这个布局就是键盘的样子了
3 属性介绍:
Keyboard:
存储键盘以及按键相关信息。
android:horizontalGap
按键之间默认的水平间距。
android:verticalGap
按键之间默认的垂直间距。
android:keyHeight
按键的默认高度,以像素或显示高度的百分比表示。
android:keyWidth:
按键的默认宽度,以像素或显示宽度的百分比表示。
Row:
为包含按键的容器。
Key:
用于描述键盘中单个键的位置和特性。
android:codes
该键输出的unicode值。
android:codes 官网介绍是说这个是该键的unicode 值或者逗号分隔值,当然我们也可以设置成我们想要的值,在源码中提供了几个特定的值
对照表:
android:isRepeatable
这个属性如果设置为true,那么当长按该键时就会重复接受到该键上的动作,在 删除键键 和 空格键 上通常设为true。
android:keyLabel
显示在按键上的文字。
android:keyIcon 与 keyLabel
是二选一关系,它会代替文字以图标的形式显示在键上。
android:keyWidth="33.33333%p"
每一个按钮的宽度,可以设置百分比
android:keyHeight="10%p"
每一个按钮高度,可以设置百分比
KeyboardView是一个渲染虚拟键盘的View。 它处理键的渲染和检测按键和触摸动作。
显然我们需要KeyboardView来对Keyboard里的数据进行渲染并呈现给我们以及相关的点击事件做处理。 1)//设置keyboard与KeyboardView相关联的方法。
public void setKeyboard(Keyboard keyboard)
2)//设置虚拟键盘事件的监听,此方法必须设置,不然会报错。
public void setOnKeyboardActionListener(OnKeyboardActionListener listener) 步骤上呢,做完第一步的关联,并设置第二步的事件,调用KeyboardView.setVisible(true);键盘就可以显示出来了, 是不是很简单。不过到这里还没有结束哦,接下来我们为了使用上的便利要进行相应的封装。 封装 这里我们通过继承EditText来对Keyboard与KeyboardView进行封装。
attr.xml文件,这里我们需要通过一个xml类型的自定义属性引入我们的键盘描述文件。
1、新建一个类,我取名叫KeyUtils然后在里面新建三个属性。KeyBoard用处可大了,他才是本体,可以通过设置他来切换键盘。
2、构造函数,初始下三个参数。
3、先说下预览图吧,就是效果图上的预览图,需要预览图的话的将setPreviewEnabled设置为true,不过还得在布局文件中的android.inputmethodservice.KeyboardView标签对立面设置预览布局。否则,不会有字。至于设置的布局,一个TextView就好了~
onPress: 按下触发。
onRelease:松开触发。
onKey : 松开触发,在OnRelease之前触发。
swipeLeft : 左滑动,其他同理。哈哈~就这么懒。
onText :需要在 键盘xml,也就是我此时的number.xml里面中key标签对里添加一个
* Android常用的物理按键及其触发事件
* KEYCODE_POWER 电源键
* KEYCODE_MENU 菜单键
* KEYCODE_BACK 后退键
* KEYCODE_HOME Home键
* KEYCODE_CAMERA 相机键
* KEYCODE_SEARCH 查找键
* KEYCODE_VOLUME_UP 音量键+
* KEYCODE_VOLUME_DOWN 音量键-
* KEYCODE_VOLUME_MUTE 静音
* 方向键
* KEYCODE_DPAD_CENTER
* KEYCODE_DPAD_UP
* KEYCODE_DPAD_DOWN
* KEYCODE_DPAD_LEFT
* KEYCODE_DPAD_RIGHT
* 键盘键
* 数字0~9 字母A~Z
* KEYCODE_0 ~ KEYCODE_9
* KEYCODE_A ~ KEYCODE_Z
* 提供的回调方法有
* onKeyUp()、OnKeyDown()、onKeyLongPress()
*
* @author Administrator
*
*/
public class MainActivity extends Activity {
private Button btnClose = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnClose = (Button) findViewById(R.id.btnClose);
btnClose.setOnClickListener(new closelistener());
}
class closelistener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
}
/**
* 重写onKeyDown方法可以拦截系统默认的处理
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "后退键", Toast.LENGTH_SHORT).show();
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
Toast.makeText(this, "声音+", Toast.LENGTH_SHORT).show();
return false;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
Toast.makeText(this, "声音-", Toast.LENGTH_SHORT).show();
return false;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {
Toast.makeText(this, "静音", Toast.LENGTH_SHORT).show();
return false;
} else if (keyCode == KeyEvent.KEYCODE_HOME) {
Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* 重写onTouchEvent方法可以处理Touch事件
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_MOVE) {
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
}
return super.onTouchEvent(event);
}
}
更多的事件可以参考SDK文档的MotionEvent、KeyEvent两个类,在KeyEvent中如果处理了KeyEvent.KEYCODE_BACK事件,那就不会执行默认的操作,比如收到KeyEvent.KEYCODE_BACK事件后默认是退出,如果直接return那就不会处理退出了。
它是基于Lua 脚本语言来实现的。
触动精灵是一款模拟手机触摸、按键操作的软件,通过制作脚本,可以让触动精灵代替双手,自动执行一系列触摸、按键操作。
触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本;只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。
扩展资料:
1、软件介绍
触动精灵的脚本编写基于 Lua 脚本语言,支持其所有标准函数库。除了能够模拟点击、移动、单击 Home 键之外,触动精灵还提供一系列取色、找色、截图、找图等函数,更有丰富的网络插件、文件操作插件可供选择,脚本作者可以选择不公开源代码发布自己的脚本。
2、软件功能
(1)网络游戏中可作自动化脚本实现自动打怪,自动补血,自动说话等;
(2)办公族可用它自动处理表格、文档,自动收发邮件等;
(3)循环播放、定时运行能够按计划执行重复甚至繁杂的工作。
3、软件特点
(1)安装、操作简单;
(2)支持 Lua 基本函数库,提供模拟函数支持,第三方插件接口;
(3)集脚本试用、加密、编译与授权于一体的脚本分发系统。
参考资料来源:百度百科-触动精灵
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流