重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
android手机长按home键能起作用的作用有以下几类:
公司主营业务:成都网站设计、网站制作、外贸营销网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出龙山免费做网站回馈大家。
Home键可以说是我们每天使用最多的功能之一,一般我们使用这个按键多数是用于返回主页或调出语音助手等等。
各个版本的安卓,常按home键,屏幕会出现最近是用过的app程序图标。
对于安卓4.1来说,则更加明细,即不仅会出现最近用过的aop还会出现,正在后台运行的程序,一个简单的小窗口即可迅速切换到后台程序。
简单的理解就是,手机home键就是菜单键和主键。
android 底层在当你点击控件2秒后就属于长按事件了,则进入长按事件监听,当点击少于2秒就直接进入点击事件了,望有帮助
下面记录一个在工作中,遇到的touchend事件不触发的bug解决方法:
就是当长按特定按钮的时候,会启动一个事件,往杯子里面装水,当松开后,会有相关的操作,但是发现在部分安卓手机里面,长按松手后,touchend事件触发不了。一开始在网上找了好多回复,都说在touchstart事件里面加上e.preventDefault()就可以啦,但是经过亲身试验后,发现此方法对长按事件无效!
后来只能查看了一下touch其他的事件,发现还有 touchcancel 这么一个东西!
这个事件是在,当触控点被特定的实现方式打乱时触发 的,于是就怀着死马当活马医的心情,在页面添加了touchcancel事件,里面执行的逻辑和touchend事件里面的逻辑是一模一样的,结果还真是不让人失望,完美解决!
首先,支持长按和点击的视图一定是从Down开始就消费事件,在不设置Touch监听器OnTouchListener的情况下,每个事件都会进入onTouchEvent方法。
当一个视图设置了长按监听器,在Flag中会增加LONG_CLICKABLE标志。View内部静态类ListenerInfo集合了与View相关的各类监听。
Down事件时,会调用一个checkForLongClick方法,向主线程延迟发送一个Runnable。
延迟时间即系统认为多久算长按事件的时间,如果期间手指一直在触屏,当到达该时间时,主线程调度该任务,run方法,将触发performLongClick方法,系统认为这是一次长按事件。
手指还在触摸时,就会调用长按监听器的onLongClick方法,如果未达到时间,手指已经离开屏幕,Up事件,此时,如果还没有执行过Runnable,将会调用removeCallbacks方法移除该任务,确保手指离开后不会再触发长按Runnable,同时,执行performClick方法,系统认为这是一次点击事件。
任重而道远
IOS与安卓的区别:
1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3、IOS中用于UI指令权限最高,安卓中 数据处理 指令权限最高
iOS只有一个物理键,android有三个物理键
2 iOS和android的底层交互设计不同
1、返回的入口不一致,android基本上是硬件返回,iphone则是屏幕软键返回。但这点很可能随着Android4.0的出现而改变;
2、长按为android的一个基本的标配操作,但iOS应尽量避免;这点造成了很多操作上的不一样,例如删除操作,iOS为滑动,android为长按
3、Android有menu键,点击后调出menu菜单,iOS没有;
4、tab的处理上也不一致,因为iPhone没有menu菜单,更多的操作很可能放在最后一个tab里,叫“more”;
5、应用的通知处理也不一致,iOS为图标右上角的小红圈,Android为statuesbar中的滚动显示;
6、iPhone有子tab,android好像还没有看到有,除非是第三方应用自己添加的控件。
2.操作栏
a )安卓操作或tab均放上方,以免与虚拟键盘冲突,而非ios的下方,但许多安卓应用也按ios的来设计,因此这个点的设计更改可以酌情考量; iPhone 5c, 任何时候从屏幕下方可以拉出“控制中心”,Android 是从上方拉出了
只说一点,滑动屏幕的感受,iOS是最顺畅最自然的。在商场里体验过很多android,滑动的感受总有那么点怪怪的,或者说有点生硬,低配置的还有卡顿等现象。
OS 用导航栏左上角的返回钮,android 用户习惯按全局 back 键。
Android 见啥都想长按;iOS用户则非常不习惯,只会点来点去。
iOS上面捏合手势是标配;Android 上不是跑太快就卡的狠要么没反应,总之各种难过少人用。
Android 下边缘有软键,交互元素要离远点
2.iOS 双击home键的界面完全更改,改成卡片式预览。如果觉得拨动app缩略图行进过慢可以拨动下方的app图标,会稍微快一点。向上推app缩略图来关闭app。
Android,在主界面,按左键 ,可以预览所以打开的应用,向上推 可关闭app
在短信中,向左稍稍拉动可以显示每条短信的具体收发时间。
长按事件一般是放到 onKeyLongPress 函数中来处理的。
那具体是怎么做的呢,下面请看步骤:
第一步,先在 onKeyDown 函数中判断 event.getRepeatCount 的次数(实际上长按就是由一系列的onKeyDown事件触发的)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
case KeyEvent.KEYCODE_VOLUME_UP:
if (mCameraAppView.getVisibility() != View.VISIBLE) {
return false;
}
Log.v(TAG,"onKeyDown event.getRepeatCount() "+event.getRepeatCount());
if (event.getRepeatCount() == 0) {
event.startTracking();
return true;
}
return true;
}
return super.onKeyDown(keyCode, event);
}
如果一直按着不放,通过打 log 可以看到
onKeyDown event.getRepeatCount() 0
onKeyDown event.getRepeatCount() 1
onKeyDown event.getRepeatCount() 2
onKeyDown event.getRepeatCount() 3
onKeyDown event.getRepeatCount() 4
onKeyDown event.getRepeatCount() 5
onKeyDown event.getRepeatCount() 6
onKeyDown event.getRepeatCount() 7
onKeyDown event.getRepeatCount() 8
onKeyDown event.getRepeatCount() 9
onKeyDown event.getRepeatCount() 10
onKeyDown event.getRepeatCount() 11
onKeyDown event.getRepeatCount() 12
……
第二步,重载 onKeyLongPressed 函数,在这个函数中你可以添加你的处理
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
Log.v(TAG,"key long pressed keyCode = "+keyCode);
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
Log.v(TAG,"KEYCODE_VOLUME_UP/DOWN long pressed");
lockLongPressKey = true;
onShutterButtonLongPressed();
return true;
default:
break;
}
return super.onKeyLongPress(keyCode, event);
}
第三步,如果在onKeyUp 函数中也处理了相同的按键的话,那么需要对 onKeyLongPress 和 onKeyUp 中该按键的处理作互斥处理了
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
Log.v(TAG, "onKeyUp event.getRepeatCount() "+event.getRepeatCount());
if(lockLongPressKey){
lockLongPressKey = false;
return true;
}
if (event.getRepeatCount() == 0) {
Log.v(TAG, "prepare for onShutterButtonClick..");
if (mEnableRecordBtn mReviewImage.getVisibility() != View.VISIBLE
mBgLearningMessageFrame.getVisibility() == View.GONE) {
if (mShutterButton != null mShutterButton.isEnabled()) {
onShutterButtonFocus(false);
collapseCameraControls();//fulin@20121101@fix PD1218 B121027-224
onShutterButtonClick();
}
}
}
if (mCameraAppView.getVisibility() != View.VISIBLE) {
return false;
}
return true;
}
return super.onKeyUp(keyCode, event);
}
互斥处理的原因是,长按事件处理完后,松开按键后就会执行 onKeyUp 函数。而这两处针对相同的按键想要实现的功能又不一样
固在此添加一个 private boolean lockLongPressKey = false; 变量,在 onKeyLongPress 函数中处理过以后,在 onKeyUp中便不再处理。
2, button
自定义的 button 长按事件则是通过实现 OnLongClickListener 接口来做到的。
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MyActivity extends Activity implements OnLongClickListener{
Button button;//声明按钮的引用
public void onCreate(Bundle savedInstanceState) {//重写的onCreate方法
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) this.findViewById(R.id.button);//得到按钮的引用
button.setTextSize(20);
button.setOnLongClickListener(this);//注册监听
}
public boolean onLongClick(View v) {//实现接口中的方法
if(v == button){//当按下的是按钮时
Toast.makeText(
this,
"长时间按下了按钮",
Toast.LENGTH_SHORT
).show();//显示提示
}
return false;
}
}