Android 滑动返回库 SwipeBackLayout 的使用
SwipeBackLayout 的配置
首先在 Android Studio 的app 的 build.gradle 中进行引用:
compile 'me.imid.swipebacklayout.lib:library:1.0.0'
然后只要在需要滑动的 activity 中进行继承与 SwipeBackActivity ,如下:
public class BaseActivity extends SwipeBackActivity {
private SwipeBackLayout mSwipeBackLayout;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSwipeBackLayout = getSwipeBackLayout();
//设置滑动方向,可设置EDGE_LEFT, EDGE_RIGHT, EDGE_ALL, EDGE_BOTTOM
mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);//设置滑动方向
//mSwipeBackLayout.setEdgeSize(200);//滑动删除的效果只能从边界滑动才有效果,如果要扩大touch的范围,可以调用这个方法
}
}
如果按照上面的方式继承,那么可能所有的 activity 都会出现滑动。如果我们不想在某些 activity 中实现滑动应该怎么做?比如主界面的 MainActivity.java 中。那就需要下面的都方法。
setSwipeBackEnable(false); //主 activity 可以调用该方法,禁止滑动删除 为 true 时可以滑动,为 false 时则不可以滑动。
滑动退出可以在 activity 中做如下设置:
@Override
public void onBackPressed() {
scrollToFinishActivity();//左滑退出activity
}
SwipeBackLayout 存在的坑:
首项:SwipeBackActivity 继承的是 FragmentActivity
public class SwipeBackActivity extends FragmentActivity implements SwipeBackActivityBase {
private SwipeBackActivityHelper mHelper;
}
如果这样的话 AppCompatActivity 中的某些特性就不可以使用。如果想要使用 AppCompatActivity ,需要自己将库中的 FragmentActivity 改成 AppCompatActivity 。
其次:
如果按照上面的 方式配置,你会发现, 滑动的时候,会出现一片黑色 。 那么怎么使得滑动时不时黑色呢? 就需要在 application 的主题中设置下面属性:
true
就是将属性设置为透明,当然还有另外一种方法,就是将滑动时的背景设置为一张图片。 如下:
@mipmap/icon
不过还是建议设置为透明:
3,当设置了上面的 true 为true 以后,在 Android 5.0以下的系统中,你返回的时候,会出现先返回桌面,再放回上一个界面的情况,真针对这种情况,需要在 MainActivity 中重新设置一个主题,使得 返回时上面一个 activity 不是透明。
如下:
android:name=".ui.activity.MainActivity"
android:windowSoftInputMode="adjustNothing"
android:theme="@style/AppThemeNotTranslucent"/>
style.xml
false
4.最严重的一个坑:
设置了true 会导致 Activity 的生命周期不走 onStop(), 这样会导致 activity 无法被回收,如果程序中大量的 activity 都使用了滑动返回,那么就会出现 卡顿的现象。针对这个问题,暂时没有找到合适的解决办法。 最大的遗憾是: SwipeBackLayout 这个库的作者好像已经不维护更新。