android按键处理
Ⅰ 安卓手机怎么设置下面的三个按键
安卓手机下面三个键调出方法如下(以华为nova8手机为例):
1、解锁手机,在设置里点击“系统和更新”选项。
2、在系统和更新界面点击“系统导航方式”选项。
3、在系统导航方式界面点击“屏幕内导航”右侧的开关。
4、打开“屏幕三键导航”开关后即可看到手机屏幕下方的三个按钮,三角形按钮是返回键。
安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发,Android操作系统最初由安迪鲁宾开发,主要支持手机。
安卓系统的优势
开放性:在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android联盟中来,显着的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
丰富的硬件:这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,如同从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。
以上内容参考:网络—安卓系统
Ⅱ 关于Android中的软键盘
原文链接:彻底搞定Android开发中软键盘的常见问题
软件盘的本质是什么?软键盘其实是一个Dialog。
InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或者全屏显示。
软键盘显示的调整
Android 定义了一个属性,名字为windowSoftInputMode, 这个属性用于设置Activity主窗口与软键盘的交互模式,用于避免软键盘遮挡内容的问题。我们可以在AndroidManifet.xml中对Activity进行设置。如:android:windowSoftInputMode=”stateUnchanged|adjustPan”。 该属性可选的值有两部分,一部分为软键盘的状态控制,控制软键盘是隐藏还是显示,另一部分是Activity窗口的调整,以便腾出空间展示软键盘。 android:windowSoftInputMode的属性设置必须是下面中的一个值,或一个”state”值加一个”adjust”值的组合,各个值之间用 | 分开。
stateUnspecified-未指定状态 :当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。
stateUnchanged-不改变状态 :当前界面的软键盘状态,取决于上一个界面的软键盘状态,无论是隐藏还是显示。
stateHidden-隐藏状态 :当设置该状态时,软键盘总是被隐藏,不管是否有输入的需求。
stateAlwaysHidden-总是隐藏状态 :当设置该状态时,软键盘总是被隐藏,和stateHidden不同的是,当我们跳转到下个界面,如果下个页面的软键盘是显示的,而我们再次回来的时候,软键盘就会隐藏起来。
stateVisible-可见状态 :当设置为这个状态时,软键盘总是可见的,即使在界面上没有输入框的情况下也可以强制弹出来出来。
stateAlwaysVisible-总是显示状态 :当设置为这个状态时,软键盘总是可见的,和stateVisible不同的是,当我们跳转到下个界面,如果下个页面软键盘是隐藏的,而我们再次回来的时候,软键盘就会显示出来。
adjustUnspecified-未指定模式 :设置软键盘与软件的显示内容之间的显示关系。当你跟我们没有设置这个值的时候,这个选项也是默认的设置模式。在这中情况下,系统会根据界面选择不同的模式。
adjustResize-调整模式 :该模式下窗口总是调整屏幕的大小用以保证软键盘的显示空间;这个选项不能和adjustPan同时使用,如果这两个属性都没有被设置, 系统会根据窗口中的布局自动选择其中一个 。
adjustPan-默认模式 :该模式下通过不会调整来保证软键盘的空间,而是采取了另外一种策略,系统会通过布局的移动,来保证用户要进行输入的输入框肯定在用户的视野范围里面,从而让用户可以看到自己输入的内容。
案例
没有滚动布局xml
对于没有滚动控件的布局来说,adjustPan就是默认的设置,比如我们案例应用中的文本输入8,上面的文本输入框123和按钮都会被顶上去,且页面布局不可以滚动。
对于没有滚动控件的布局来说,整个布局会网上偏移(包括标题等)以保证输入框的可见。如果有滚动控件,那么就是内容网上偏移,标题不会动,还可以通关滚动来查看被顶上去的内容,而这点是不可滚动的布局所不具备的
有滚动布局xml
对于有滚动控件的布局,则是采用的adjustResize方式,比如我们案例应用中的文本输入8,上面的文本输入框123和按钮都会被顶上去, 可以通过滚动来查看被顶上去的内容。
** 根据这一原理,我们就可以把开发中遇到的软键盘遮挡页面的问题,利用ScrollView当做根布局,让系统采用adjustResize模式,很好地解决这一问题。**
自动弹出软键盘
有时候需要一进入Activity后就自动弹出软键盘,可以通过设置一个时间函数来实现,具体写法如下:
方法一:
方法二:
有时进入Activity后不希望系统自动弹出软键盘,我们可以按照下面的方法来实现:
方法一:
在AndroidMainfest.xml中选择那个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden
方法二:
让EditText失去焦点,使用EditText的clearFocus方法
方法三:
强制隐藏Android输入法窗口
方法四:
EditText始终不弹出软件键盘
EditText设置ScrollView压缩背景图片解决办法
在你的Activity里加上
有时希望根据条件动态关闭软键盘,我们可以使用InputMethodManager类,按照下面的方法来实现:
方法一:
方法二:
强制隐藏软键盘,这个方法倒是很实用。
方法三:
方法四:
在onclick事件下.以下方法可行.(如果是EditText失去焦点/得到焦点,没有效果)
InputMethodManager的具体用法可以参考下面的链接: http://www.apihome.cn/api/android/InputMethodManager.html
使用android:imeOptinos可对Android自带的软键盘进行一些界面上的设置:
android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕
同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键
android:imeOptions="actionNone" //输入框右侧不带任何提示 android:imeOptions="actionGo" //右下角按键内容为'开始' android:imeOptions="actionSearch" //右下角按键为放大镜图片,搜索 android:imeOptions="actionSend" //右下角按键内容为'发送' android:imeOptions="actionNext" //右下角按键内容为'下一步' android:imeOptions="actionDone" //右下角按键内容为'完成'
同时,可能EditText添加相应的监听器,捕捉用户点击了软键盘右下角按钮的监听事件,以便进行处理。
开发中有个需求是将页面底部的一个按钮顶起,但是开发时发现Android5.0以后的版本设置了adjustResize属性后无法成功顶起。纠结了好久,最后在stackoverflow找到解决方案,那就是在根布局上加上fitsSystemWindow=”true”即可。
这里的fitsSystemWindow具体的作用就是你的**contentview是否忽略actionbar,title,屏幕的底部虚拟按键,将整个屏幕当作可用的空间。 **
正常情况,contentview可用的空间是去除了actionbar,title,底部按键的空间后剩余的可用区域;这个属性设置为true,则忽略,false则不忽略
在edittext上加入Android:imeOptions=”actionSearch”这个属性没响应,最后发现在2.3及以上版本不起作用,解决方案:加上
因为输入法键盘右下角默认的回车键本来就是换行用的,当设置单行后,回车换行就失去作用了,这样就可以设置为搜索、发送、go等等。
Ⅲ 如何屏蔽Android特殊按键事件
会的哪个
Ⅳ android 怎么改键盘按键
首先,保证手机已经ROOT,并且安装了RE文件管理器,先用RE管理器打开system\usr\keylayout下的文件s3c-keypad.kl(以文本编辑方式打开),在目录中不同的数字对应不同的功能,看好原先对应的功能,在将数字按照喜欢的风格进行重新编写:
1.
116代表锁屏键
2.
102代表宝石键
3.
231代表拨号键
4.
217代表相机上面的键
5.
26代表挂机键
6.
115代表音量+
7.
114代表音量-
8.
158代表相机键
9.
改完立刻重启就OK了。
Ⅳ 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 TV按键焦点原理浅谈
原文链接: Android TV按键焦点原理浅谈
本篇主要阅读 Android 源码讲解 TV 的按键事件分发原理和焦点查找原理,源码基于 Android9.0 ,首先思考几个问题:
带着这些问题,我们一起来撸 Android 源码吧!了解了系统是如何处理的有便于我们解决 TV 上一些按键和焦点的问题。
首先我们看下按键事件的入口 ViewRootImpl 类中的 ViewPostImeInputStage 内部类:
可以看到注释1,2,3,4分别判断不同事件执行不同方法,本篇主要讨论的TV焦点事件,主要看下 processKeyEvent 方法:
可以看到在该方法中执行了 mView.dispatchKeyEvent 方法,这里的 View 其实是 DecorView ,接着看下该方法:
上面首先判断了如果是第一次按下则处理panel的快捷键,如果处理了则不往下走,否则继续判断当窗口未销毁且回调非空则回调处理,如果处理了则不往下走,否则让 PhoneWindow 对应的 onKeyDown , onKeyUp 方法来处理。
接下来我们按照这个派发顺序依次来看看相关方法的实现,这里先看看 Activity 的 dispatchKeyEvent 实现:
我们看第1点 superDispatchKeyEvent 方法,可以看到该方法为一个抽象方法,而它的实现是实现它的子类 PhoneWindow :
该方法又回调用 DecorView 中的 superDispatchKeyEvent 方法:
此时,再来看下 ViewGroup 的 dispatchKeyEvent 方法:
接着看下 View 的 dispatchKeyEvent 方法:
该方法主要是判断如果有给 View 设置 OnKeyListener 事件且 View 为可用状态,则优先处理监听事件,其次调用 KeyEvent 的 dispatch 方法,接下来我们看下该方法:
该方法主要处理了按下、弹起事件,其中按下如果 mRepeatCount 重复次数大于0判断为长按,则执行长按事件。
我们继续看下 View 的 onKeyDown 方法:
按下事件判断了如果为确认相关的按键才到下一步处理,判断点击或长按条件满足,执行按下 View 正中心坐标,然后执行 checkForLongClick 检查长按方法,看下该方法如下:
我们经常会遇到电视按遥控器时长按会执行一次 onKeyDown 、 onKeyUp ,之后才是一直 onKeyDown ,松开后才执行 onKeyUp ,原因就在于这个检查长按方法是延迟的。 delayOffset 传进来的是0,所以延迟时间为 ViewConfiguration.getLongPressTimeout() ,即该类中定义的 DEFAULT_LONG_PRESS_TIMEOUT 常量。
同样的如果是触摸屏,可以看下 View 类中的 onTouchEvent 方法在按下操作的时候会开启 CheckForTap 线程检查是否是长按,该线程同样是延迟的,时间为 ViewConfiguration.getTapTimeout() ,即该类中的 TAP_TIMEOUT 常量,知道了这个你就知道如果写脚本或插件模拟长按应该间隔多长时间了,是不是一下你的模拟长按插件速度又可以更加准确快速的实现了。
不同版本系统定义的延迟时间有可能不一样,比如Google API 28 的 DEFAULT_LONG_PRESS_TIMEOUT 是500, TAP_TIMEOUT 是100,而 API 30 的 DEFAULT_LONG_PRESS_TIMEOUT 是400, TAP_TIMEOUT 也是100。
接下来再看下 Activity 的 onKeyDown :
回到 Decorview 中的 dispatchKeyEvent 方法看看 PhoneWindow 的 onKeyDown 方法:
onKeyUp 方法也可以自己再看下,以上就是浅谈按键事件的分发流程了。
总结:
上面讲解了按键事件分发流程,当上面分发完所有都没消费的时候,就会继续走 ViewRootImpl 的焦点导航流程,接下来看下 performFocusNavigation 方法:
首先我们看 mView.findFocus() ,该方法实际是调用了 ViewGroup 的 findFocus 方法:
该方法很简单,就是向下递归查找在当前页面已经获取焦点的 View ,继续看 focused.focusSearch(direction) 调用了 View 的 focusSearch 方法:
该方法向上递归查找,调用 ViewGroup 的 focusSearch 方法:
如果是根命名空间,则调用 FocusFinder 的 findNextFocus 方法查找焦点,否则继续往上查找。继续看 FocusFinder 的 findNextFocus 方法:
可以看到该方法首先查找用户指定的下一个获取焦点的 view ,如果找到了直接返回该 view ,如果没找到继续下面先添加 effectiveRoot 下的所有 view 到 focusables 集合中去,然后调用 findNextFocus 方法查找系统可获取下一个焦点的最近 view 。
我们先看下 findNextUserSpecifiedFocus 方法的实现:
通过用户指定焦点方式不是本篇的重点,这里就不贴出内部细节源码了。该方法实际就是调用 View 的 findUserSetNextFocus 方法来查找用户设置的下一个可获取焦点的 view ,然后在 while 循环中判断如果找到的是可以获取焦点并且可见的并且不是 InTouchNode 模式,则返回该焦点,否则继续循环查找直到找了一个循环没有找到可以获取焦点的或者 userSetNextFocus 为 null 跳出循环返回 null 。
再来看下系统就近原则查找的 findNextFocus 方法:
该方法主要通过 在相对方向上找下一个焦点,该方法内部逻辑比较简单,这里就不贴出来了,进去看下就知道其实就是先给 focusables 排序,然后从中找到 focused 在其中的后一个或前一个 view ,如果没找到并且 focusables 不为空则返回 focusables 的第一个。
接下来我们重点看下 方法:
再看下 isBetterCandidate 方法,该方法很关键,内部包含一系列逻辑如何成为最佳候选者:
该方法英文注释很直观,就不中文翻译了,首先看下成为候选人的 isCandidate 方法:
该方法判断了目标Rect如果在源Rect的方向一侧且不在内部的话,则为候选者,如第一个 destRect 左侧应在 srcRect 左侧左边, destRect 右侧应在 srcRect 右侧左边,其他方向同理。
接下来看下 beamBeats 方法:
Ⅶ android fragment 中怎么处理按键事件dispatchkeyevent
fragment里不能写dispatchkeyevent
可以在启动fragment的activity里写一个回调方法
public interface MyTouchListener
{
public void onTouchEvent(MotionEvent event);
}
/*
* 保存MyTouchListener接口的列表
*/
private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<MyActivity.MyTouchListener>();
/**
* 提供给Fragment通过getActivity()方法来注册自己的触摸事件的方法
* @param listener
*/
public void registerMyTouchListener(MyTouchListener listener)
{
myTouchListeners.add(listener);
}
/**
* 提供给Fragment通过getActivity()方法来取消注册自己的触摸事件的方法
* @param listener
*/
public void unRegisterMyTouchListener(MyTouchListener listener)
{
myTouchListeners.remove(listener);
}
/**
* 分发触摸事件给所有注册了MyTouchListener的接口
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
for (MyTouchListener listener : myTouchListeners) {
listener.onTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);
}
然后在fragment中注册使用这个方法
/**
* Fragment中,注册
* 接收ChatActivity的Touch回调的对象
* 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理
*/
private MyActivity.MyTouchListener mTouchListener = new ChatActivity.MyTouchListener() {
@Override
public void onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
//逻辑处理
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
if (vTracker == null) {
vTracker = VelocityTracker.obtain();
} else {
vTracker.clear();
}
vTracker.addMovement(event);
break;
case MotionEvent.ACTION_MOVE:
vTracker.addMovement(event);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
try{
vTracker.recycle();
}catch (Exception e){
e.printStackTrace();
}
break;
}
}
};
注意,要在fragment的onAttach方法中注册回调
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//在该Fragment的构造函数中注册mTouchListener的回调
if(mTouchListener!=null){
if(getActivity()!=null){
((MyActivity)getActivity()).registerMyTouchListener(mTouchListener);
}
}
}
Ⅷ 如何捕获android系统按键事件
下面是android学习手册中关于按键的介绍,例子,文档、源码都可以看,360手机助手中下载
在Android系统中,存在多种界面事件,如点击事件、触摸事件、焦点事件和菜单事件等,在这些界面事件发生时,Android界面框架调用界面控件的事件处理方法对事件进行处理。
Android系统界面事件的传递和处理遵循以下规则。
·如果界面控件设置了事件监听器,则事件将先传递给事件监听器。
·如果界面控件没有设置事件监听器,界面事件则会直接传递给界面控件的其他事件处理方法。
·即使界面控件设置了事件监听器,界面事件也可以再次传递给其他事件处理方法。
·是否继续传递事件给其他处理方法是由事件监听器处理方法的返回值决定的。
·如果监听器处理方法的返回值为true,表示该事件已经完成处理过程,不需要其他处理方法参与处理过程,这样事件就不会再继续进行传递。
·如果监听器处理方法的返回值为false,则表示该事件没有完成处理过程,或需要其他处理方法捕获到该事件,事件会被传递给其他的事件处理方法。
在MVC模型中,控制器根据界面事件(UI Event)类型不同,将事件传递给界面控件不同的事件处理方法。
·按键事件(KeyEvent)将传递给onKey()方法进行处理。
·触摸事件(TouchEvent)将传递给onTouch()方法进行处理。
下面以EditText控件中的按键事件为例,说明Android系统界面事件传递和处理过程。
假设EditText控件已经设置了按键事件监听器,当用户按下键盘上的某个按键时,控制器将产生KeyEvent按键事件。Android系统会首先判断EditText控件是否设置了按键事件监听器,因为EditText控件已经设置按键事件监听器OnKeyListener,所以按键事件先传递到监听器的事件处理方法onKey()中,事件能够继续传递给EditText控件的其他事件处理方法,完全根据onKey()方法的返回值来确定:如果onKey()方法返回false,事件将继续传递,这样EditText控件就可以捕获到该事件,将按键的内容显示在EditText控件中;如果onKey()方法返回true,将阻止按键事件的继续传递,这样EditText控件就不能够捕获到按键事件,也就不能够将按键内容显示在EditText控件中。
Android界面框架支持对按键事件的监听,并能够将按键事件的详细信息传递给处理方法。为了处理控件的按键事件,先需要设置按键事件的监听器,并重载onKey()方法,示例代码如代码清单1所示。
代码清单1 设置按键事件的监听器,并重载onKey()方法
entryText.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
//过程代码……
return true/false;
}
第1行代码是设置控件的按键事件监听器。
第3行代码的onKey ()方法中的参数:第1个参数View表示产生按键事件的界面控件;第2个参数keyCode表示按键代码;第3个参数KeyEvent则包含了事件的详细信息,如按键的重复次数、硬件编码和按键标志等。
第5行代码是onKey()方法的返回值:返回true,阻止事件传递;返回false,允许继续传递按键事件。
KeyEventDemo是一个说明如何处理按键事件的示例。
KeyEventDemo用户界面如图1所示。
图1 KeyEventDemo用户界面
从图5-27中可以看出,最上方的EditText控件是输入字符的区域,中间的CheckBox控件用来控制onKey()方法的返回值,最下方的TextView控件用来显示按键事件的详细信息,包括按键动作、按键代码、按键字符、UNICODE编码、重复次数、功能键状态、硬件编码和按键标志。
界面的XML文件的代码如代码清单2所示
代码清单2 界面XML文件
<EditText android:id="@+id/entry"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</EditText>
<CheckBox android:id="@+id/block"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回true,阻止将按键事件传递给界面元素" >
</CheckBox>
<TextView android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按键事件信息" >
</TextView>
在EditText中,当任何一个键按下或抬起时,都会引发按键事件。为了能够使EditText处理按键事件,需要使用setOnKeyListener ()方法在代码中设置按键事件监听器,并在onKey()方法中添加按键事件的处理过程,代码如代码清单3所示。
代码清单3 setOnKeyListener()
entryText.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
int metaState = keyEvent.getMetaState();
int unicodeChar = keyEvent.getUnicodeChar();
String msg = "";
msg +="按键动作:" + String.valueOf(keyEvent.getAction())+"
";
msg +="按键代码:" + String.valueOf(keyCode)+"
";
msg +="按键字符:" + (char)unicodeChar+"
";
msg +="UNICODE:" + String.valueOf(unicodeChar)+"
";
msg +="重复次数:"+ String.valueOf(keyEvent.getRepeatCount())+"
";
msg +="功能键状态:" + String.valueOf(metaState)+"
";
msg +="硬件编码:" + String.valueOf(keyEvent.getScanCode())+"
";
msg +="按键标志:" + String.valueOf(keyEvent.getFlags())+"
";
labelView.setText(msg);
if (checkBox.isChecked())
return true;
else
return false;
}
在上述代码中,第4行代码用来获取功能键状态。功能键包括左Alt键、右Alt键和Shift键,当这3个功能键被按下时,功能键代码metaState值分别为18、34和65;但没有功能键被按下时,功能键代码metaState值分别为0。
第5行代码获取了按键的Unicode值,而在第9行中,将Unicode转换为了字符,显示在TextView中。
第7行代码获取了按键动作,0表示按下按键,1表示抬起按键。第7行代码获取按键的重复次数,但当按键被长时间按下时,则会产生这个属性值。
第13行代码获取了按键的硬件编码,各硬件设备的按键硬件编码都不相同,因此该值一般用于调试。
第14行获取了按键事件的标志符。
Ⅸ 市面上有一款android的按键精灵,他是基于什么原理实现的实现
基于Lua脚本语言。
触动精灵的脚本编写基于Lua脚本语言,支持其所有标准函数库。除了能够模拟点击、移动、单击 Home键之外,触动精灵还提供一系列取色、找色、截图、找图等函数,更有丰富的网络插件、文件操作插件可供选择,脚本作者可以选择不公开源代码发布自己的脚本。
通过制作脚本,可以让触动精灵代替双手,自动执行一系列触摸、按键操作。触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本。
(9)android按键处理扩展阅读:
触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本 。
还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本。
只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。
Lua脚本语言的其他应用:
1、很多应用程序、游戏使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括魔兽世界、博德之门、愤怒的小鸟、QQ三国、VOCALOID3、Garry's Mod、太阳神三国杀、游戏王ygocore和饥荒等。
2、同时支持面向过程(procere-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象。
3、使用Lua语言编写的第三方插件可以通过第三方脚本加载器插件FlyWithLua加载,让插件开发者可以轻松地编写功能强大的插件用以增强X-Plane的模拟效果。
Ⅹ Flutter开发之Android物理按键返回
在flutter开发过程中,发现Android手机在App首页点击物理返回按钮时,App会退出并且再次点开App时会重新启动,这代表了上次的退出直接杀死了App,和我们平常的退到手机桌面不同,所以开发了一个单独插件来处理这种情况。
使用步骤如下:
1、pubspec.yaml文件中引入依赖
2、引用插件
3、使用插件来退出App到桌面,并且保持App后台运行
可根据实际情况在_onWillPop方法中处理相关逻辑,比如连续两次点击物理返回按钮才退出到桌面等。