Android back按键基础开发
来源:互联网 发布:淘宝可爱耳钉店铺推荐 编辑:程序博客网 时间:2024/06/05 01:50
Android back按键基础开发
在app设计中, 通常都会针对用户的退出按钮进行特别的开发:
- 按下back按钮两次才退出应用
- 在ActionBar中新增回退按钮
- 增加按钮直接回退到主屏幕
- ….
该篇文章针对以上的几种常见需求, 做一个模拟的例子进行简单说明
自定义Back按键
问题: 应用程序以自己的方式来处理用户按下物理Back按键后的行为;
解决方案:
可以在Activity中调用onBackPressed()回调方法或者再Fragment中popBackStack中操作回退栈;
实现:
如果想要在Activity中进行用户点击物理Back按键后得到相应的通知, 可以复写Activity中的onBackPressed()回调方法。
// 当用户点击物理Back按键的时候, 会调用该方法class MainActivity extends Activity{ ... @Override public void onBackPressed() { super.onBackPressed(); }}
这个方法的默认实现会将该Activity中绑定的Fragment全部弹出并且销毁该Activity, 如果需要修改这个默认流程, 只需要确保不调用super方法即可。(不进行源码分析)
场景: 用户需要在两秒钟之内按两次Back按键才认为需要退出该界面, 否则认为用户的误操作。
// 当用户点击物理Back按键的时候, 会调用该方法long firstDown = 0l;@Overridepublic void onBackPressed() { if(System.currentTimeMillis() - firstDown < 2000){ super.onBackPressed(); }else{ Toast.makeText(this, "再按一次退出应用", Toast.LENGTH_SHORT).show(); firstDown = System.currentTimeMillis(); }}
监听Fragment进行回退操作
问题:
目前大部分应用的主界面Tab都采用的是Fragment进行管理, 然而我们都知道, Fragment只是依附于Activity上的, 当用户打开多个Fragment时, 进行物理Back按键退出的时候, 希望能够通过打开的Fragment顺序进行依次关闭或者直接回退到第一个Fragment主界面。
解决方案:
在进行Fragment的绑定的时候, 我们需要将当前的Activity添加到回退栈中, 当用户按下物理Back按键时, 可根据回退栈中的Fragment进行依次回退或回退到指定的Fragment中
实现:
不管是进行Fragment的依次回退还是指定回退, 都需要先将Fragment添加至Fragment的回退栈中。
class MainActivity extends Activity{ .... void init(){ FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.id.main_fragment_layout, MyFragment.newInstance("one"), "one"); transaction.addToBackStack("one"); transaction.commit(); transaction = fragmentManager.beginTransaction(); transaction.add(R.id.main_fragment_layout, MyFragment.newInstance("two"), "two"); transaction.addToBackStack("two"); transaction.commit(); transaction = fragmentManager.beginTransaction(); transaction.add(R.id.main_fragment_layout, MyFragment.newInstance("three"), "three"); transaction.addToBackStack("three"); transaction.commit(); transaction = fragmentManager.beginTransaction(); transaction.add(R.id.main_fragment_layout, MyFragment.newInstance("four"), "four"); transaction.addToBackStack("four"); transaction.commit(); } public static class MyFragment extends Fragment{ private String title; public static Fragment newInstance(String title){ MyFragment fragment = new MyFragment(); fragment.setTitle(title); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { TextView tv = new TextView(getActivity()); tv.setText(title); tv.setBackgroundColor(Color.parseColor("#4400ff00")); return tv; } public void setTitle(String title){ this.title = title; } }}
上诉代码通过FragmentTransaction.addToBackStack("xxx")
把Fragment添加到回退栈中, 名称为"xxx"
当我们需要进行指定回退的时候, 这个参数就很有用了。
场景1:本应用有个抽屉效果, 每个抽屉的item都是一个Fragment表示, 当我们依次点开item后, 用户退出时,需要从当前显示的item内容依次回退到第一个item。
class MainActivity extends Activity{ ... getSupportFragmentManager().popBackStack();}
上诉方法, 将会从Fragment中的回退栈中依次的退出。
场景2:本应用有个抽屉效果, 每个抽屉的item都是一个Fragment表示,当用户按下物理Back按键时, 需要回退到第一个Framgent内容, 再决定是否需要退出app。
class MainActivity extends Activity{ ... getSupportFragmentManager().popBackStack("two", FragmentManager.POP_BACK_STACK_INCLUSIVE);}
模拟Home按键
背景:
应用程序有一个按钮, 需要跟物理Home按键一样的功能。
解决方案:
其实Home界面也可以理解为一个Activity。 我们只需要知道如果打开这个Activity就可以了。
实现:
Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);
大结局:
该篇文章主要是针对一些应用场景的app开发常见的效果而产生的, 没有要求整体质量。
言语匪浅, 心意可达。
- Android back按键基础开发
- 【android 开发笔记】 Android popupWindow响应back按键并关闭
- android back按键 一点技巧
- Android 按键屏蔽, Back, Home....
- Android 监听Back、Home按键
- Android popupWindow响应back按键并关闭
- Android popupWindow响应back按键并关闭
- Android popupWindow响应back按键并关闭
- android 彻底关闭应用程序(back按键)
- Android popupWindow响应back按键并关闭
- Android popupWindow响应back按键并关闭
- Android popupWindow响应back按键并关闭
- 【Android游戏开发十九】(必看篇)SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理!
- 【Android游戏开发十九】(必看篇)SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理!
- 【Android游戏开发十九】(必看篇)SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理!
- 【Android游戏开发十九】(必看篇)SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理!
- 【Android游戏开发十九】(必看篇)SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理!
- 【Android游戏开发十九】(必看篇)SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理!
- node-sass 的安装和使用
- 怎样抓住机会
- 编译时间太长?跟我学对症下药!
- pandas官方文档cookbook(5)中MissValue&groupby翻译
- 生成随机唯一数
- Android back按键基础开发
- getOrDefault,putIfAbsent,replace--JDK1.8HashMap新特性
- HDU 2713 DP
- linux网络编程--TCP分包 粘包 MTU 和MSS之间的关系分析
- Gradle View 的使用,方便查看项目的依赖引用
- Zookeeper源码分析——请求处理与分布式一致性
- 二叉排序树、平衡二叉排序树、B-树、B+树、B*树
- 大话数据结构 code 第3章 01线性表顺序存储_List
- Mybatis学习笔记(三)-使用Mybatis完成CURD