Android 使用SwipeBackLayout实现滑动返回上一级页面——实战来袭
我们知道。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实现滑动返回上一级页面——实战来袭的更多相关文章
- 类似IOS的滑动返回上一级,SwipeBackLayout-android的滑动返回类库
最近,公司在开发App的需求中增加了一个新的需求,要在android的页面中增加向右滑动的时候返回上一级页面.我刚知道这个需求的时候,感觉有点坑,可能设计那边最近接触到知乎的客户端或者是IOS的滑动可 ...
- JavaScript返回上一页和返回上一级页面并刷新
JavaScript返回上一页和刷新当前页 window.history.go(-1); //返回上一页 window.history.back(); //返回上一页 //如果要强行刷新的话就是:wi ...
- Xamarin.Forms listview中的button按钮,实现带着参数返回上一级页面
今天在做列表显示的时候遇到一个问题,就是在ListView中如何才能让一个button的按钮工作并且包含参数呢? 其实有点类似于rep里的控件无法起获取一样.在Xamarin中,当你button绑定事 ...
- 小程序返回上一级页面背景音乐报错 setBackgroundAudioState:fail title is nil!;
小程序初始化在onLoad的时候加载了一次背景音乐. 如果此时报错是title必传.如果没有 会报错一次 setBackgroundAudioState:fail title is nil!; 这个都 ...
- JS写返回上一级
应产品需求,自己的网站上要有返回上一级的需求,几经周折,做个小总结. (1): $("XX").on("click",function(){ wind ...
- Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作
(11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...
- 织梦dedecms返回上一级链接代码
如题:织梦dede手机页面,如果我进入了下一级页面,想回上一级,<a href="xx">该用什么标签? 用JS实现,代码如下 <a href="jav ...
- git bash返回上一级目录
YITU-LIUMZ+Administrator@yitu-liumz MINGW64 ~/learngit/gitskills (dev)$ cd ..\ 注意 cd 后面有空格 然后就会弹出一个 ...
- os.path.join合并 os.path.dirname返回上一级目录 os.path.exists(path) os.stat('path/filename')获取文件/目录信息
import os str1 = "grsdgfd" str2 = "wddf" str3 = "gddgs" # print(str1 + ...
随机推荐
- Appium+python自动化20-查看iOS上app元素属性【转载】
前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素Mac版的appium1.6的版 ...
- mysql故障(找不mysql命令)
[root@slave support-files]# mysql -uroot -p123-bash: mysql: command not found #我的mysql编译安装指定的路径是--ba ...
- Python实现微信小程序支付功能
由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 当然具体的参数配置可以参考官 ...
- Codeforces 825E - Minimal Labels
825E - Minimal Labels 题意 给出 m 条有向边,组成有向无环图,输出一个 1 到 n 组成的排列,每个数只能出现一次,表示每个点的标号.如果有边 \((u, v)\) 那么 \( ...
- my-git-wiki-doing
github项目quick setup git初始化 git init git添加remote git remote add origin YOURS_REMOTE_URL git修改remote的u ...
- TCP/IP,HTTP,SOAP等协议之区别
术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议.“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络.把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到 ...
- Requirement Analysis
BRD:Business Requirements Document,商业需求文档.这是产品声明周期中最早的问的文档,再早就应该是脑中的构思了,其内容涉及市场分析,销售策略,盈利预测等,通常是和老大们 ...
- Binary Tree Vertical Order Traversal -- LeetCode
Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...
- Codeforces 757 E Bash Plays with Functions
Discription Bash got tired on his journey to become the greatest Pokemon master. So he decides to ta ...
- 每天一个liunx命令2之rz和sz命令
1安装命令工具包 yum install lrzsz 2sz命令发送文件到本地(send): sz filename 3rz命令本地上传文件到服务器(receive): rz 执行该命令后 ...