精华内容
下载资源
问答
  • Android实现返回键操作思路
    2021-06-08 04:17:02

    记录用户点击的操作历史,使用栈数据结构,频繁的操作栈顶(添加,获取,删除),使用LinkedList

    捕获用户的返回键操作,响应返回键,返回上一个界面

    MainActivity.java

    /**

    * 返回键处理

    */

    @Override

    public boolean onKeyDown(int keyCode,KeyEvent event) {

    if(keyCode==KeyEvent.KEYCODE_BACK){

    boolean result=MiddleManager.getInstance().goBack();

    if(!result){

    Toast.makeText(MainActivity.this,"是否退出应用",1).show();

    }

    return false;

    }

    return super.onKeyDown(keyCode,event);

    }

    MiddleManager.java

    //操作历史栈

    private LinkedList HISTORY=new LinkedList();

    /**

    * 处理返回键

    * @return

    */

    public boolean goBack() {

    //如果为空会抛异常

    if(HISTORY.size()>0){

    if(HISTORY.size()==1){

    return false;

    }

    HISTORY.removeFirst();

    if(HISTORY.size()>0){

    String key=HISTORY.getFirst();

    BaseView targetView=VIEWCACHE.get(key);

    mainContainer.removeAllViews();

    View child=targetView.getView();

    mainContainer.addView(child);

    child.startAnimation(AnimationUtils.loadAnimation(mainContainer.getContext(),R.anim.left_to_right));

    currentView=targetView;

    return true;

    }

    }

    return false;

    }

    /**

    * 加载界面

    */

    public void loadView(Class extends BaseView> baseViewClass) {

    BaseView baseView=null;

    //判断是否存在

    String key=baseViewClass.getSimpleName();

    if(VIEWCACHE.containsKey(key)){

    baseView=VIEWCACHE.get(key);

    }else{

    try {

    Constructor extends BaseView> constructor;

    constructor = baseViewClass.getConstructor(Context.class);

    baseView=constructor.newInstance(mainContainer.getContext());

    } catch (Exception e) {

    e.printStackTrace();

    }

    VIEWCACHE.put(key,baseView);

    }

    mainContainer.removeAllViews();

    View child=baseView.getView();

    mainContainer.addView(child);

    child.startAnimation(AnimationUtils.loadAnimation(mainContainer.getContext(),R.anim.left_to_right));

    currentView=baseView;

    //放入栈

    HISTORY.addFirst(key);

    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

    总结

    以上是编程之家为你收集整理的Android实现返回键操作思路全部内容,希望文章能够帮你解决Android实现返回键操作思路所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    小编个人微信号 jb51ccc

    喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

    更多相关内容
  • Android实现返回键功能

    2020-09-02 03:10:56
    本文给大家介绍android实现返回键功能,返回键的操作方法,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
  • 在初始化中添加一下代码

    在初始化中添加一下代码

    展开全文
  • 主要介绍了Android 拦截返回键事件的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这部分内容,需要的朋友可以参考下
  • 主要给大家介绍了关于React Native学习之Android返回键BackAndroid的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用React Native具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。
  • 两步实现 Android 自带返回功能和返回图片 1. 在layout 中的布局的头部添加下面代码 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout...

    两步实现 Android 自带返回功能和返回图片

    1. 在layout 中的布局的头部添加下面代码

      <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:title="查看会议"
        app:titleTextColor="#fff" />

       在布局中添加后的效果

     

     

    2.在activity 中添加以下代码

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about);
    
        /**
         * 添加 Android 自带的返回按钮图标
         */
        setSupportActionBar(findViewById(R.id.toolbar));
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }
    
     /**
     * toolbar 的监听事件(控制Android 自带的返回功能)
     * @param item
     * @return
     */
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                finish();
                break;
        }
        return true;
    }

     

    展开全文
  • Android物理返回键的点击事件,一般webview的默认行为是 window.history.go(-1) ,但是在实际需求场景下,简单的页面回退并不能满足需求,所以需要H5页面监听Android物理返回键从而自定义处理方法。原理主要是运用 ...

    Android物理返回键的点击事件,一般webview的默认行为是 window.history.go(-1) ,但是在实际需求场景下,简单的页面回退并不能满足需求,所以需要H5页面监听Android物理返回键从而自定义处理方法。

    原理

    主要是运用 HTML5 History API 实现。所以,首先简单介绍下 HTML5 History API

    history 属性

    history.length

    history.state

    复制代码

    history 方法

    history.back()

    history.forward()

    history.go()

    复制代码

    HTML5 新API

    history.pushState(state, title, url); 添加一条历史记录,不刷新页面

    history.replaceState(state, title, url); 替换一条历史记录,不刷新页面

    事件

    popState事件:历史记录发生变化时触发,调用history.pushState()或history.replaceState()不会触发此事件

    window.addEventListener('popstate', handlePopstate);

    复制代码

    hashchange事件:页面hash值发生改变时触发

    window.addEventListener('hashchange', handleHashChange);

    复制代码

    监听Android物理返回键实现

    // index.js

    (function (pkg){

    var STATE = '_android_back';

    // 维护处理方法的栈

    var _android_back_handles = [];

    // 触发一次popstate方法,则调用最新处理方法

    var handlePopstate = function (){

    var handle = _android_back_handles.pop();

    handle && handle();

    };

    // 通过调用listen方法添加处理方法

    var listen = function (handle){

    _android_back_handles.push(handle);

    };

    // 通过调用push方法,新增一条历史记录,并添加对应处理方法

    var push = function (state, handle){

    if (handle) {

    history.pushState(state, null, location.href);

    handle && _android_back_handles.push(handle);

    }

    };

    const init = function (){

    // 通过调用 history.pushState() 方法添加一条历史记录

    history.pushState(STATE, null, location.href);

    // 监听 popstate 事件,当点击Android物理返回键时,会触发该事件

    window.addEventListener('popstate', handlePopstate);

    this.listen = listen;

    this.push = push;

    };

    init.call(window[pkg] = window[pkg] || {});

    })('AndroidBack');

    复制代码此实现参考了 github.com/iazrael/xba… ,在此基础上,根据需要修改和添加了一部分代码

    此外,封装了一个React高阶组件,方便React项目使用,代码如下:

    import * as React from 'react';

    export default (Target, handleBack) => {

    return class AndroidBack extends React.Component{

    _handles = []

    back = () => {

    window.history.go(-1);

    }

    componentDidMount () {

    // 通过调用 history.pushState() 方法添加一条历史记录

    history.pushState('_android_back', null, location.href);

    // 监听 popstate 事件,当点击Android物理返回键时,会触发该事件

    window.addEventListener('popstate', this.handlePopstate);

    if (handleBack) {

    // 添加自定义处理方法

    this._handles.push(handleBack);

    } else {

    // 如果没有自定义处理方法,默认调用 window.history.go(-1);

    this._handles.push(this.back);

    }

    }

    componentWillUnmount () {

    window.removeEventListener('popstate', this.handlePopstate);

    }

    // 触发一次popstate方法,则调用最新处理方法

    handlePopstate = () => {

    const handle = this._handles.pop();

    handle && handle();

    }

    // 通过调用push方法,新增一条历史记录,并添加对应处理方法

    push = (state, handle) => {

    if (handle) {

    history.pushState(state, null, location.href);

    this._handles.push(handle);

    }

    }

    render () {

    return (

    );

    }

    };

    };复制代码

    实现原理基本在注释中注明,在这就不详细叙述了,所有代码在 h5_android_back 仓库中

    使用

    两种方式:

    1、将对象挂在window上,支持任意页面接入,使用如下:

    index.js

    // 监听Android物理返回键,自定义处理方法

    window.AndroidBack.listen(() => {

    console.log('back');

    });

    // 新增Android物理返回键监听事件,使用场景,比如:页面内弹出浮层,点击Android物理返回键,不是回退页面,而是关闭浮层

    window.AndroidBack.push('close_modal', () => {

    // 关闭弹窗

    console.log('close_modal');

    });

    复制代码

    2、封装了React高阶组件,支持React项目接入,使用如下:

    index_react.js

    import * as React from 'react';

    import AndroidBack from 'h5_android_back/index_react.js';

    class App extends React.Component{

    // ...

    openModal = () => {

    // 新增Android物理返回键监听事件,使用场景,比如:页面内弹出浮层,点击Android物理返回键,不是回退页面,而是关闭浮层

    this.props._android_back_push('close_modal', () => {

    // 关闭弹窗

    console.log('close_modal');

    });

    }

    }

    // 监听Android物理返回键,自定义处理方法

    export default AndroidBack(App, () => {

    console.log('back');

    })

    复制代码

    写在最后

    注:此方案使用于所有浏览器及默认行为是页面回退的webview

    此方案在我平时工作中使用正常,希望能对有需要的小伙伴有帮助~~~

    喜欢我的文章小伙伴可以去 我的个人博客 点star ⭐️

    展开全文
  • import android.support.v7.app.ActionBarActivity;import android.util.Log;import android.view.KeyEvent;import android.os.Bundle;ppackage zhangphil.back;import android.support.v7.a...
  • 设置Toolbar中和自己app风格一致的系统返回键
  • if (Platform.OS === 'android') { BackHandler.addEventListener('hardwareBackPress', this._onBackAndroid); } }   _onBackAndroid = () =&gt; { let {navigation} = this.props; ...
  • js控制android原生返回按钮

    千次阅读 2018-01-12 17:26:17
    js是无法直接监听物理返回键的,但是我们可以用HTML5的 History 新 API pushState 来曲线监听 Android 设备的返回按钮 原理: 在页面加载后往历史记录写入一个 state, 并监听 popstate 事件, 如果返回按钮被按...
  • 在需要登录页面之前检测登录状态,但是如果用户不输入账号密码的话,点击自己做的返回按钮还好...摸索一:监听原生返回按钮,设置返回步数为2. 结果:执行功能正确,但是代码陷入死循环。 摸索中… 已经解决官网有 ...
  • /** * 注意: * super.onBackPressed()会自动调用finish()方法,关闭当前Activity. */ @Override public void onBackPressed() { ... Toast.makeText(this, "按下了back onBackPressed()", Toast.LENGTH_S.
  • 屏蔽实体按键(HOME有些特别,需要单独去分析) switch (keyCode) { case KeyEvent.KEYCODE_HOME: return true; case KeyEvent.KEYCODE_BACK: return true; case KeyEvent.KEYCODE_CALL: return true; ...
  • 如果有一个悬浮窗,运行所有程序的时候都能够看到,我希望点击悬浮窗就模拟返回键的功能,不管我现在运行的是什么程序,这个如何实现?   方法一: Runtime runtime = Runtime.getRuntime(); runtime.exec(...
  • React Native 监听android 物理返回键根据文档,安卓back键的处理主要就是一个事件监听:componentDidMount() {BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid);}...
  • 做微信h5页面时,经过了微信授权才跳转到一级默认路由home.vue中,因此在home页面时在IOS中底部会出现虚拟的返回键安卓上不会出现。且在IOS点击返回时会跳转到home空白页面不重新加载,但是在安卓机上点击返回键会...
  • android 模拟返回键功能

    千次阅读 2014-08-05 15:13:16
    我测试发现,有两种方法可行。 ①、java.lang.Runtime Runtime runtime = Runtime.getRuntime();...runtime.exec("input keyevent " + KeyEvent.KEYCODE...②、android.app.Instrumentation Instrumentation in
  • vue 定义全局函数,监听android返回键事件方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){alert('执行成功');}(2)在所有组件里可调用函数this.changeData();方法二:单独创建一...
  • Android常用之返回按键监听

    千次阅读 2016-12-15 22:48:54
    如果没有对返回键设置监听,通常按下一次返回键就会退出程序或退出某个界面,这样是很不人性化的,我们可以有两种处理方式: 按下返回键时弹出一个对话框(AlertDialog),再让用户选择是否退出 双击返回退出 下面分别...
  • 安卓屏蔽返回键

    千次阅读 2016-08-30 00:48:39
    安卓屏蔽返回键,弹出提示框,确认或取消 //屏蔽返回键 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){ //TODO //return false; AlertDialo
  • 其中location.href会自动获取到当前路径的url,添加到历史记录,然后每次点击都会先加入一次历史记录,然后再加入一次防止下次返回键触碰失效 好了,这样就能实现一种你想不让这个页面用户自己回退,或者返回键执行...
  • 基本用法根据文档,安卓back的处理主要就是一个事件监听:1 BackAndroid.addEventListener(‘hardwareBackPress‘, this.onBackPressed);2 BackAndroid.removeEventListener(‘hardwareBackPress‘, this....
  • android 进入系统wifi添加一个返回键按钮 Intent intentWifi = new Intent(Settings.ACTION_WIFI_SETTINGS);//WIFI网络 intentWifi.putExtra(“extra_prefs_show_button_bar”, true); intentWifi.putExtra(“extra_...
  • 那么这个时候点击Android手机返回键,默认是返回到上一个页面,跟浏览器的回退功能是一样的,都是返回到历史记录中的前一个记录。看着好像没啥问题,但是当H5页面当前有一个弹窗,按照正常的交互,这会儿点击手机...
  • 做过unity与安卓原生交互的同学应该都知道,我们在unity里面调用安卓原生的activity,按Home键返回到桌面,之后重新进入unity场景,安卓原生的activity就会被杀掉。其实这个问题做过安卓的人都知道,这个关乎到安卓...
  • 报错信息:I/flutter: FlutterBoost#onEvent backPressedCallbackI/flutter: FlutterBoost#performBackPressedE/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Bad state: No ...
  • 问题描述:当ionic和原生混合开发时,ionic由于不能使用插件,所以ionic方向点击手机的物理返回键是没有用的。 解决方法: 大致描述:在index.html中编写一个方法,使原生方向可以调用这个方法,并且返回给原生一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,191
精华内容 4,476
关键字:

安卓原生返回键