我们知道。APP在设计上习惯性的把返回button放在屏幕的左上角,那么,在非常多时候(尤其是大屏幕手机),操作改返回button,就会有诸多不便了。为了更加方便实现“返回”功能。如今的一些APP,如百度贴吧等。開始引入一种的新的交互方式,通过滑动屏幕。利用手势事件来高速且友好的实现该功能。

怎样高速实现上图的效果呢。Github上提供了一个开源的库SwipeBackLayout,地址:https://github.com/ikew0ng/SwipeBackLayout , 通过它,我们就能高速实现滑动返回上一级页面了。

1. 新建项目。并导入SwipeBackLayout库(对于不熟悉的开源库,我总建议引用库。方便源代码的阅读和改动)

2. 新建Activity,要求继承SwipeBackActivity

public class SecondActivity extends SwipeBackActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}

对,就这么简单,不须要在做不论什么操作,该Activity就已经能够支持“从左向右滑动返回上一级页面”了。

当然,只这样还是不够的,在页面滑动过程中,会遇到些问题:

问题1:页面滑动过程中背景黑屏:

解决该问题,我们则要为须要滑动的Activity设置背景透明的主题,不须要滑动的。自然也就无需设置了:

 <activity
android:name=".DemoActivity"
android:label="@string/app_name"/>
<activity
android:name=".SecondActivity"
android:theme="@style/otherPageStyle" />

 <!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> </style> <!-- Application theme. -->
<style name="AppTheme" parent="@style/AppBaseTheme">
</style> <!-- 首页(第一级页面不让Activity透明) -->
<style name="mainPageStyle" parent="AppTheme">
<item name="android:windowIsTranslucent">false</item>
</style> <!-- 非首页(非第一级页面让Activity透明) -->
<style name="otherPageStyle" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
</style>

问题2:实战项目中,经常会出现已有基类BaseActivity,怎样集成在一起呢?

1. 创建一个基类,BaseActivity

public class BaseActivity extends FragmentActivity {

    @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}

2. 拷贝一份SwipeBackActivity.java源代码,改动下。继承自BaseActivity:

import android.os.Bundle;
import android.view.View; import me.imid.swipebacklayout.lib.SwipeBackLayout;
import me.imid.swipebacklayout.lib.Utils;
import me.imid.swipebacklayout.lib.app.SwipeBackActivityBase;
import me.imid.swipebacklayout.lib.app.SwipeBackActivityHelper; public class MySwipeBackActivity extends BaseActivity implements SwipeBackActivityBase {
private SwipeBackActivityHelper mHelper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHelper = new SwipeBackActivityHelper(this);
mHelper.onActivityCreate();
} @Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mHelper.onPostCreate();
} @Override
public View findViewById(int id) {
View v = super.findViewById(id);
if (v == null && mHelper != null)
return mHelper.findViewById(id);
return v;
} @Override
public SwipeBackLayout getSwipeBackLayout() {
return mHelper.getSwipeBackLayout();
} @Override
public void setSwipeBackEnable(boolean enable) {
getSwipeBackLayout().setEnableGesture(enable);
} @Override
public void scrollToFinishActivity() {
Utils.convertActivityToTranslucent(this);
getSwipeBackLayout().scrollToFinishActivity();
}
}

这样,当你须要页面滑动返回的时候,则该页面的Activity就继承MySwipeBackActivity,不须要的话(比方首页),则直接继承自BaseActivity就可以。

问题3:怎样同一时候兼容SystemBarTint和SwipeBackLayout两个库。

之前写过《Android 使用SystemBarTint设置状态栏颜色》,假设什么都不做改动,直接在你的项目中引用这两个库,则会发生冲突。在4.4上。假设使用SwipeBackLayout。就不能用SystemBarTint来改变状态栏颜色。

解决该问题,能够通过改动SwipeBackLayout源代码来解决,打开SwipeBackLayout.java类,找到public
void attachToActivity(Activity activity)方法。找到:

ViewGroup decor = (ViewGroup) activity.getWindow().getDecorView();

把它改动成:

ViewGroup decor = (ViewGroup) activity.getWindow().getDecorView().findViewById(Window.ID_ANDROID_CONTENT);

如此这般,就可以解决冲突。

扩展:

在github上。另一个能够实现滑动返回上一级页面的开源库,我对照了下。感觉比SwipeBackLayout更方便,体验上也更好些。有兴趣的朋友能够自己查看:https://github.com/liuguangqiang/SwipeBack

如此这般,就OK啦!欢迎互相学习!

如有疑问,欢迎留言探讨。

Android 使用SwipeBackLayout实现滑动返回上一级页面——实战来袭的更多相关文章

  1. 类似IOS的滑动返回上一级,SwipeBackLayout-android的滑动返回类库

    最近,公司在开发App的需求中增加了一个新的需求,要在android的页面中增加向右滑动的时候返回上一级页面.我刚知道这个需求的时候,感觉有点坑,可能设计那边最近接触到知乎的客户端或者是IOS的滑动可 ...

  2. JavaScript返回上一页和返回上一级页面并刷新

    JavaScript返回上一页和刷新当前页 window.history.go(-1); //返回上一页 window.history.back(); //返回上一页 //如果要强行刷新的话就是:wi ...

  3. Xamarin.Forms listview中的button按钮,实现带着参数返回上一级页面

    今天在做列表显示的时候遇到一个问题,就是在ListView中如何才能让一个button的按钮工作并且包含参数呢? 其实有点类似于rep里的控件无法起获取一样.在Xamarin中,当你button绑定事 ...

  4. 小程序返回上一级页面背景音乐报错 setBackgroundAudioState:fail title is nil!;

    小程序初始化在onLoad的时候加载了一次背景音乐. 如果此时报错是title必传.如果没有 会报错一次 setBackgroundAudioState:fail title is nil!; 这个都 ...

  5. JS写返回上一级

    应产品需求,自己的网站上要有返回上一级的需求,几经周折,做个小总结. (1): $("XX").on("click",function(){      wind ...

  6. Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

    (11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...

  7. 织梦dedecms返回上一级链接代码

    如题:织梦dede手机页面,如果我进入了下一级页面,想回上一级,<a href="xx">该用什么标签? 用JS实现,代码如下 <a href="jav ...

  8. git bash返回上一级目录

    YITU-LIUMZ+Administrator@yitu-liumz MINGW64 ~/learngit/gitskills (dev)$ cd ..\ 注意 cd 后面有空格 然后就会弹出一个 ...

  9. os.path.join合并 os.path.dirname返回上一级目录 os.path.exists(path) os.stat('path/filename')获取文件/目录信息

    import os str1 = "grsdgfd" str2 = "wddf" str3 = "gddgs" # print(str1 + ...

随机推荐

  1. 多线程设计模式 - Future模式之JAVA原生实现

    在之前一篇博客中介绍了Future设计模式的设计思想以及具体实现,今天我们来讲一下使用JDK原生的包如何实现. JDK内置的Future主要使用到了Callable接口和FutureTask类. Ca ...

  2. hdu 5082(水题)

    Love Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. visio画任意形状图形

    1,连接线--右击---曲线连接线 2,选中组合 3,开发工具--操作--连接--填充

  4. 阿里的iptables,保存一份

    # Generated by iptables-save v1.4.7 on Fri Apr 14 16:37:31 2017 *filter :INPUT ACCEPT [0:0] :FORWARD ...

  5. (4)oracle连接工具和配置监听

    一.SQL PLUS sql plus 是oracle最常用的命令行工具,启动sqlplus工具的方法有两种 1. 是在安装好的oracle开始程序的路径下运行程序 点击运行弹出此界面 2 .是在cm ...

  6. 51nod 1420 数袋鼠好有趣【贪心】

    1420 数袋鼠好有趣 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有n只袋鼠.每只袋鼠的大小用一个整数表示. ...

  7. AtCoder Grand Contest 012 B Splatter Painting (反向处理 + 记忆化)

    题目链接  agc012 Problem B 题意  给定一个$n$个点$m$条边的无向图,现在有$q$个操作.对距离$v$不超过$d$的所有点染色,颜色编号为$c$. 求每个点最后的颜色状态. 倒过 ...

  8. HDU-6315 Naive Operations//2018 Multi-University Training Contest 2___1007 (线段树,区间除法)

    原题地址 Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/ ...

  9. Jmeter实时性能测试数据的监控

    Jmetet实时性能测试数据的监控和展示Jmeter Grafana InfluxDB 安装Grafana配置jmeter安装InfluxDB配置Grafana展示数据一安装InfluxDB 为了方便 ...

  10. 状压DP【p1879】[USACO06NOV]玉米田Corn Fields

    Description 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上 ...