-
2021-11-19 20:43:14
iOS 返回键方案
1.有node的label属性,提前生成列表,每个页面获取dom的时候就获取到此节点,用于返回操作,经过首页的测试收集关键字集合[“返回”,”Back”,”close”,”Close”,”back””topBar icon 01 02”,”558FC254 2DD6 4183 ABC3 FE4A89”]
2.没有返回键的页面,但是有X,适用于1规则
3.如果1,2规则都不满足,那么使用右滑,目前从主页测试来看 90%的页面都是满足的
def press_back_ios(self, page): """ ios由于没有物理返回键,下方的1234,来实现返回操作,优先级 1234 1.返回键 直播列表页面:topBar icon 01 02,topBar icon 01 02,,true,true,16,55,20,22,0, 2.点击x 直播页面:SHVPClose,SHVPClose,,true,true,335,44,28,28,2, 3.返回 name点击 4.右滑 s.swipe(0.01, 0.5, 0.5, 0.5) :return: """ if page.pressBackButtonIos: self.s(label=page.pressBackButtonIos).click return self.s.swipe(0.01, 0.5, 0.5, 0.5)
实操验证:页面验证(失效——右滑失效)
name—label—value
直播详情页 失效
直播页面:SHVPClose,SHVPClose,true,true,335,44,28,28,2, 是右上角的X,此页面没有返回按钮
京东超市 失效
------------------------ XCUIElementTypeOther
开始打印返回,返回,true,true,15,53,20,21,0,京东电器 生效
------------------------ XCUIElementTypeButton
开始打印MenuIconBack White,MenuIconBack White,true,true,16,55,20,20,0,服装美妆 生效
------------------------ XCUIElementTypeButton
开始打印MenuIconBack White,MenuIconBack White,true,true,16,55,20,20,0,免费水果 生效
------------------------ XCUIElementTypeButton
开始打印返回,返回,true,true,16,44,44,44,0,生活缴费 生效
------------------------ XCUIElementTypeButton
开始打印返回,返回,true,true,0,43,44,43,0,领京豆 生效
没有node借钱 生效
------------------------ XCUIElementTypeButton
开始打印返回,返回,true,true,16,56,20,20,0,秒杀 生效
------------------------ XCUIElementTypeOther
开始打印返回,返回,true,true,3,48,35,36,0,直播主页面 生效
------------------------ XCUIElementTypeButton
开始打印topBar icon 01 02,topBar icon 01 02,true,true,16,55,20,22,0,排行榜 生效
------------------------ XCUIElementTypeButton
开始打印558FC254 2DD6 4183 ABC3 FE4A89,558FC254 2DD6 4183 ABC3 FE4A89,true,true,16,56,20,20,0,品牌闪购 生效
------------------------ XCUIElementTypeButton
开始打印返回上一级,返回上一级,true,true,10,43,21,44,0,商详 生效
------------------------ XCUIElementTypeButton
开始打印返回,返回,true,true,10,50,30,30,0,更多相关内容 -
Fragment中监听返回键
2015-06-15 11:36:59有些时候在Activity中监听的返回键,但此Activity中的Fragment并不想返回键...下面的代码适合如下情况:一个Activity中实现了连续两次点击物理返回键退出应用程序,但此Activity中的Fragment物理返回键功能是从Fragment有些时候在Activity中监听的返回键,但此Activity中的Fragment并不想返回键实现同样的功能,所以需要Fragment中监听返回键。令人失望的是Fragment并不能直接对物理返回键进行监听,所以需要自己另外去进行代码实现。
下面的代码适合如下情况:一个Activity中实现了连续两次点击物理返回键退出应用程序,但此Activity中的Fragment物理返回键功能是从Fragment栈中移除此界面。
宿主FragmentActivity要实现的接口,以便确定当前屏幕可见的Fragment
public interface BackHandledInterface { public abstract void setSelectedFragment(BackHandledFragment selectedFragment); }
主界面的FragmentActivity
public class MainActivity extends FragmentActivity implements BackHandledInterface{ private BackHandledFragment mBackHandedFragment; private Button mBtn; /** 上次点击返回键的时间 */ private long lastBackPressed; /** 上次点击返回键的时间 */ private static final int QUIT_INTERVAL = 2000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.mBtn = (Button)findViewById(R.id.btn); this.mBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyFragment f = new MyFragment(); FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.container, f); ft.addToBackStack("tag"); ft.commit(); } }); } @Override public void setSelectedFragment(BackHandledFragment selectedFragment) { this.mBackHandedFragment = selectedFragment; } @Override public void onBackPressed() { if(mBackHandedFragment == null || !mBackHandedFragment.onBackPressed()){ if(getSupportFragmentManager().getBackStackEntryCount() == 0){ long backPressed = System.currentTimeMillis(); if (backPressed - lastBackPressed > QUIT_INTERVAL) { lastBackPressed = backPressed; Toast.makeText(this, "再按一次退出", Toast.LENGTH_LONG).show(); } else { finish(); System.exit(0); } } else { getSupportFragmentManager().popBackStack(); } } } }
Fragment的基类,实现对物理返回键的监听
public abstract class BackHandledFragment extends Fragment { protected BackHandledInterface mBackHandledInterface; /** * 所有继承BackHandledFragment的子类都将在这个方法中实现物理Back键按下后的逻辑 * FragmentActivity捕捉到物理返回键点击事件后会首先询问Fragment是否消费该事件 * 如果没有Fragment消息时FragmentActivity自己才会消费该事件 */ protected abstract boolean onBackPressed(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(!(getActivity() instanceof BackHandledInterface)){ throw new ClassCastException("Hosting Activity must implement BackHandledInterface"); }else{ this.mBackHandledInterface = (BackHandledInterface)getActivity(); } } @Override public void onStart() { super.onStart(); //告诉FragmentActivity,当前Fragment在栈顶 mBackHandledInterface.setSelectedFragment(this); } }
显示在当前屏幕的Fragment
public class MyFragment extends BackHandledFragment { private boolean hadIntercept; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return getLayoutInflater(savedInstanceState).inflate(R.layout.fragment_a, null); } @Override protected boolean onBackPressed() { if(hadIntercept){ return false; }else{ getFragmentManager().popBackStack(); hadIntercept = true; return true; } } }
如果要在Fragment中的物理返回键实现其他功能,则可根据此代码另行改进。
思路来源于另一位博友的优雅的让Fragment监听返回键 ,感谢这位博友。
-
Delphi D10.X安卓开发中按两次返回键退出系统的方法
2020-03-07 14:03:25在安卓APP应用中,通常按下返回键后会关闭程序,有时候我们为了避免误按返回健导致程序的退出,会对按下返回健进行检测,并要求连续按下两次才退出程序。 在Delphi中开发安卓时,如何检测并实现两次退出APP呢。你...在安卓APP应用中,通常按下返回键后会关闭程序,有时候我们为了避免误按返回健导致程序的退出,会对按下返回健进行检测,并要求连续按下两次才退出程序。
在Delphi中开发安卓时,如何检测并实现两次退出APP呢。你可以使用发下方式。定义变量
首先需要定义一个用于记录按下返回健时间的变量:
private { Private declarations } vTiming: Cardinal; // 时间计数
定义常量
其次,为了方便调整按下两次返回健的时间间隔,我们定义一个常量来记录:
const CIntervals: Integer = 1800; //两次按键的间隔时间 毫秒
这里我们给常量定义了1800,也就是1.8秒的时间,表示按两次按健应在1.8秒内完成。那么在实际使用时,可以根据自己的需要来调整这个时间间隔值。
引用Toast
uses u_Toast;
这个单元在我上一篇博客里有,请参见:《Delphi D10.X安卓APP开发中简单使用原生Toast》(直接点击前面的内容可跳转查看)
他是为了在按下第一次返回健时给予一个友好的提示。初始化按健时间
这里,我们是在窗体创建的时候记录下时间:
procedure TForm5.FormCreate(Sender: TObject); begin vTiming := TThread.GetTickCount; end;
监听窗体按健,实现两次返回健退出程序
procedure TForm5.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin //如果是按下返回键,并且大于间隔时间,则提示 if (Key = vkHardwareBack) And (TThread.GetTickCount- vTiming> CIntervals) then begin Key := 0; vTiming := TThread.GetTickCount; Toast('再按一次退出'); end; end;
整体代码
总体的代码量很小,也就不上传演示Demo到下载空间了,大家可以根据这里的讲述在自己的项目里使用。
以下是我Demo的全部代码内容,就没给窗体内容的,窗体上就显示了一个标题,其实也是可以不用的。unit fMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects; type TForm5 = class(TForm) Text1: TText; procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { Private declarations } vTiming: Cardinal; // 时间计数 public { Public declarations } end; var Form5: TForm5; implementation uses u_Toast; const CIntervals: Integer = 1800; //两次按键的间隔时间 毫秒 {$R *.fmx} procedure TForm5.FormCreate(Sender: TObject); begin vTiming := TThread.GetTickCount; end; procedure TForm5.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin //如果是按下返回键,并且大于间隔时间,则提示 if (Key = vkHardwareBack) And (TThread.GetTickCount- vTiming> CIntervals) then begin Key := 0; vTiming := TThread.GetTickCount; Toast('再按一次退出'); end; end; end.
相关文章导读
《Delphi D10.X 安卓APP开发中按返回键后程序不退出程序的方法》
《Delphi D10.X安卓APP开发中简单使用原生Toast》
(点击上面标题后直接查看)
欢迎光顾本人小店:(https://shop63778938.taobao.com/)
小店也提供delphi方面其他技术支持、定制开发。后记
大家有什么不清楚的,可以给我留言或讨论。
以上信息对您有用的话请点赞收藏,就下面这行
-
前端工作爬坑日记(一):js监听Android手机物理返回按键
2019-01-22 17:11:36在工作开发过程中,遇见一个功能需求,要求在页面A.html对Android手机的物理返回按键进行监听,当用户点击物理返回按键时,弹出confirm弹框:用户点击“确定”,跳转至页面B;用户点击取消,仍停留在当前页面,此时...功能需求描述
在工作开发过程中,遇见一个功能需求,要求在页面A.html对Android手机的物理返回按键进行监听,当用户点击物理返回按键时,弹出confirm弹框:用户点击“确定”,跳转至页面B;用户点击取消,仍停留在当前页面,此时点击物理返回按键,依旧弹出confirm弹框,重复上述过程。
实现逻辑
当前,js并没有对应Android手机物理返回按键这一事件的API,无法直接对这一事件进行监听以及后续操作,因此,我们只能通过js的其他方法,来实现近似的效果。这里,我们考虑的是使用history有关的方法来实现。接下来,简要介绍一下本次需要使用的几个方法
- window.history.pushState(state, title, utl) :在页面中直接创建一个history实体,并将其添加到历史记录中;
state:对象,可存储数据,可以通过 history.state方法进行读取;
title:对应历史记录的标题
url:创建的历史记录的链接。进行历史记录操作时会跳转到该链接。 - popstate:history实体被改变时,触发该事件;
具体实现的思路就是,在页面加载时,通过window.history.pushState 方法,创建一个无实际使用意义的history实体。随后,通过addEventLister方法对popstate方法进行进行,并绑定自己想要执行的函数。需要注意的是,这里的addEventListener的 use Capture 参数需要为默认的false,使其在冒泡阶段执行。
在上面创建新的无意义history实体的用处是,由于用户点击Android物理返回按键时,会在触发popstate事件时,销毁最新的history实体,通过创建新的无意义history实体则可以防止有用的history实体被误销毁,导致其他bug出现。
同理,由于每次返回都会消耗一个 history 实体,若用户选择取消离开,则需要继续 pushState 一个新的实体,确保停留在当前页面。不然的话,则会出现第二次点击物理返回按键时,不执行希望的函数,而直接回退的问题,即没有实现第二次及以后的物理返回按键监听。
实现代码
$(function(){ addEventBack(); function addEventBack(){ pushHistory(); window.addEventListener("popstate",addBackKey, false); function pushHistory() { var state = { title: "title", url: "#" }; window.history.pushState(state, "title", "#jjjj"); } } function addBackKey(){ var res = confirm("是否确认离开当前页面?"); if (res == true) { window.location.href="/aaa.html"; }else{ addEventBack(); history.pushState(state, null, location.href); } } })
参考资料
链接: history有关方法.
xback.js-github.结语
不得不说,熟悉并掌握window有关的方法,是真的很有帮助,各位一起加油,?。
- window.history.pushState(state, title, utl) :在页面中直接创建一个history实体,并将其添加到历史记录中;
-
Vivo侧滑返回手势工具app-Vivo手机侧滑手势工具下载v9.2.0.0 安卓版-西西软件下载
2021-05-28 03:09:26Vivo手机侧滑手势工具是一款为安卓9的机型用户提供的侧滑手势返回工具,vivo的很多机型现在都没有侧滑返回的手势功能了,这导致一些大屏机型单手操作并不方便,大家可以下载这款Vivo手机侧滑手势工具来加回侧滑手势... -
Android返回键处理、任务和home键处理
2017-05-26 13:12:59处理返回键的事件,监听任务键和home键的监听。 -
Android按返回键退出应用时弹出对话框
2015-03-22 15:11:30在Android中,默认情况下按返回键就是退出应用;而要实现按返回键退出应用时弹出对话框就是在onKeyDown事件中添加监听,根据对话框中的选项实现退出与否。 效果图如下: @Override public boolean onKeyDown... -
从网页监听Android设备的返回键
2016-06-22 13:08:50最近搞Android项目的时候,遇到一个...之所以说这个需求蛋疼,是因为Android有个物理返回键啊……返回键啊……键啊……啊…… 用户按下返回键后,预期应该跟点击页面上的返回键一样——返回App。然而这个返回键的被按 -
Ionic在android中返回键的处理问题
2017-05-22 17:20:21一,一段代码就可以解决问题...//ionic点击系统返回键退出APP .run(function ($rootScope, $ionicPlatform, $state, $ionicHistory, $ionicPopup, $cordovaKeyboard, $timeout) { window.addEventListener('native.key -
在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!
2016-08-20 11:43:44在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的... 这个其实大家都知道,首先我们要了解流程,你要屏蔽这个返回键,那你就要拿到这个返回键的事件了,所以我们要监听了,而在Activ -
Android面试题-Activity A跳转Activity B,再按返回键,生命周期执行的顺序?
2020-04-17 10:03:32Activity A跳转Activity B,再按返回键,A、B的生命周期执行顺序是什么? 当听到这个题目的时候,我得意地笑了笑,对于Activity的生命周期已经记熟的我,心想,为什么不直接问Activity的生命周期呢?于是想当然的说... -
KODI按键映射,看IPTV按键设置
2021-06-07 09:27:55KODI按键映射,看IPTV按键设置2020-04-09 18:10:1016点赞76收藏7评论KODI播放器功能丰富,其中自定义...一、安装 程序插件Keymap EditorKODI的插件库提供了按键映射插件,先下载 程序插件Keymap Editor,如图运行Ke... -
在网易云音乐网页版上加下载按键进行下载歌曲
2018-05-20 12:49:01源由 原理 代码解决 思路 Ajax 请求函数 获取 id 和歌名 点击下载 利用 a 标签 ...每一次放假回家的时候,都会帮家里面的人下载歌曲,当然差不多用的都是网易云音乐网页版,但是只有客户端才提供下... -
Apple Watch上的2个按键是这么玩的
2021-07-26 03:26:14原标题:Apple Watch上的2个按键是这么玩的点评:苹果不说,但是你要知道的用法。 Apple Watch是苹果全新的产品,代表了苹果全新的设计理念,如此一来,操作和交互方式就与手机自然也有所不同。结果有的小伙伴把苹果... -
Android在APP中跳转到另一个APP后,从另一个APP返回
2017-07-25 08:58:11场景:两个APP,一个是自己做的APP1,一个是安卓市场下载的APP2;两个WIFI,信息均已知。 目的:APP1打开时,连接到了WIFI1,APP1中有接口可以切换到APP2,但APP2需要连接WIFI2, 因此在切换前连接到了WIFI2。当用户... -
程序员如何一键批量下载Iconfont图标
2020-06-02 11:36:23程序员如何一键批量下载Iconfont图标 官方并没有一键加入图标购物车的选项,当你想用全部iconfont图标时,可以试试我的方法,如下: 一、在iconfont图标库中,找到你需求的图标,先清空自己当前的购物车,避免’污染’,... -
OkHttp下载文件并使用服务器返回的文件名字
2018-01-27 14:41:10开发中有这么个场景,Android端下载文件,文件名字大多数都由我们app端定义,假如说,产品说,为了不让我们客户端写死,可以直接使用服务器返回的文件名字.好那么我们今天来研究一下 看下效果 调用的代码 ... -
按键响应、按键无冲、按键调速到底是怎么一回事?
2020-12-20 13:39:19这个问题一提出来,必然两派打的不可开交。吵来吵去,两派还是按着各自的想法认为,没什么结果。到底谁更适合游戏不是谁嘴炮放的响谁就有理的,可能很多人都只是从手感上去分析,且仅仅是从感觉上判断。对于游戏操作... -
键盘按键映射器安卓版
2021-01-13 04:31:23键盘按键映射器支持自定义音量键、返回键、home键多种功能,比如关闭、快速唤醒等等操作,通过按键映射器可以很轻松的实现!软件介绍xposed button按键映射器是一款支持自定义手机按键的xp模块,可直装使用,同其他... -
uni-app小程序监听左上角的返回按钮。
2021-07-07 16:13:12A页面跳转到B,那么B操作了以后,比如下载了,然后回到A页面他的下载数量就会加1. 但是常规的点击左上角返回前一个页面并不能更新。 B页面 onUnload(){ uni.$emit("getlist",{})//这里可以传个空。 } A页面 ... -
iOS开发实现页面的跳转与返回
2015-07-28 15:41:32我在之前的博客中实现了页面的跳转,在iOS中实现这个功能是十分简单方便的。...(1)在第二个页面中拖拽一个按钮,写上“返回”。然后打开这个ViewController对应的继承于UIViewController的swift类,注意是点击 -
Android 返回键取消dialog的监听
2016-01-14 10:57:23今天做一个按返回键取消下载更新,本以为用onBackPressed或者onKeyDown就可以监听到,但是发现并不行,后来又想在对话框取消后会执行Activity的onResume生命周期,又不行,发现是在被另外一个Dialog类型的Activity... -
在vue项目中如何引用mui来实现监听安卓手机的物理返回键
2018-06-12 11:51:381.先下载mui.js,直接在vue项目中的index.html页面中引入进来2.在index.html中加入下面的代码<script> mui.init({ swipeBack: false, //关闭右滑关闭功能(默认就是false) keyEventBind: { back... -
android中如何实现连续点击返回键退出整个应用 android两次返回退出应用
2013-11-03 23:04:15android中如何实现连续点击返回键退出整个应用 -
下载完点击“打开应用”后,按HOME键回到桌面,再次点击应用,没有回到之前的页面,而是打开新的应用
2014-09-18 10:34:53它不是回到之前的页面,而是启动了新的应用,之前的页面也没有被kill掉,按下返回键还是会回退到之前的页面,等于是打开了两个相同的应用! 解决方案:这个问题困扰了我很久,也查找了很多资料,也没有得到解决... -
Scrapy--下载器中间件(Downloader Middleware)
2019-04-25 17:23:31下载器中间件简介 自定义下载器中间件 RandomUserAgentMiddleware RandomProxyMiddleware 激活下载器中间件 内置下载器中间件 CookiesMiddleware DefaultHeadersMiddleware DownloadTimeoutMiddleware ... -
电脑进入游戏怎么返回桌面
2021-06-26 07:00:06Alt+ Ctrl + Esc可以返回桌面4,CTRL + ALT + DEL启动任务管理器5,Windows启动开始菜单6,alt +输入游戏窗口之后 在计算机上输入cf游戏,请按什么键您可以返回桌面_Microsoft图标键+ D键,同时立即按一下... -
win7一键还原按哪个键_win7一键还原
2021-07-27 01:23:202.安装完成这个一键还原软件之后,然后就进入了软件的功能界面,由于还原系统的时候必须要有一个Ghost镜像文...2017-03-19 12:57:40联想一键还原键这个是挨着电源键旁边的,有一个小小的键的,图标是一个返回箭头的... -
Android 小米盒子游戏手柄按键捕获 - 能获取到的 home 键依然是个痛
2015-06-02 16:43:40由以上分析可以掌握最终返回按键的处理过程,如何结束当前 Activity 的,接下来要实现二次按返回键再关闭当前 Activity , 先声明当前主线程下的 Handler: Handler handler=new Handler(); 接下来重载 onKeyDown ...