android按键,android按键精灵实现原理

android 怎么改键盘按键

首先,保证手机已经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了。

Android TV 按键焦点事件分发流程详解

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自定义软键盘

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物理键

* 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那就不会处理退出了。

市面上有一款android的按键精灵,他是基于什么原理实现的实现

它是基于Lua 脚本语言来实现的。

触动精灵是一款模拟手机触摸、按键操作的软件,通过制作脚本,可以让触动精灵代替双手,自动执行一系列触摸、按键操作。

触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本;只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。

扩展资料:

1、软件介绍

触动精灵的脚本编写基于 Lua 脚本语言,支持其所有标准函数库。除了能够模拟点击、移动、单击 Home 键之外,触动精灵还提供一系列取色、找色、截图、找图等函数,更有丰富的网络插件、文件操作插件可供选择,脚本作者可以选择不公开源代码发布自己的脚本。

2、软件功能

(1)网络游戏中可作自动化脚本实现自动打怪,自动补血,自动说话等;

(2)办公族可用它自动处理表格、文档,自动收发邮件等;

(3)循环播放、定时运行能够按计划执行重复甚至繁杂的工作。

3、软件特点

(1)安装、操作简单;

(2)支持 Lua 基本函数库,提供模拟函数支持,第三方插件接口;

(3)集脚本试用、加密、编译与授权于一体的脚本分发系统。

参考资料来源:百度百科-触动精灵


名称栏目:android按键,android按键精灵实现原理
转载源于:http://ybzwz.com/article/dsohgos.html