三分钟集成Android 右滑退出功能

487 阅读2分钟
原文链接: www.jianshu.com

一.轰隆一声雳响,小编闪亮登场。

二.本篇采用第三方控件swipebacklayout,集成步骤如下: 1.依赖 compile 'me.imid.swipebacklayout.lib:library:1.1.0'

2.基类BaseActivity继承SwipeBackActivity

3.在不需要滑动的Activity中添加如下代码:

getSwipeBackLayout().setEnableGesture(false);//禁止右滑退出

4.在清单文件( AndroidManifest )文件中,为主Activity(就是主界面的activity 如MainActivity)的theme属性所对应的style样式中,添加如下代码:

<item name="android:windowIsTranslucent">false</item>

找不到位置的朋友可以参考下图:


AndroidManifest文件中.png
vaues文件夹下的styles文件中.png

5.为需要滑动退出的activity的style样式中,添加如下代码:

     <item name="android:windowIsTranslucent">true</item>

6.到此为止,集成成功。需要添加混淆的朋友可以在混淆文件中加入如下代码

     #SwipeBackLayout
     -dontwarn me.imid.swipebacklayout.lib.**
     -keep class me.imid.swipebacklayout.lib.**{*;}

7.与状态栏颜色冲突的解决方案:

      A.为每个根Activity设置背景色,此时设置的背景色即为状态栏颜色。
      再用单独的一个Layout包裹所有布局作为次根布局,单独设置你需要的背景色即可。

8.与沉浸式状态栏冲突的解决方案:

A.在根布局下添加一个填充作用的View,代码设置相当于状态栏高度的margin值即可。
B.参考代码如下(MyUtils为个人工具类,具体方法可往下翻。):
    //获取状态栏高度
    int statusBarHeight = MyUtils.getStatusBarHeight(this);
    //设置margin值
    MyUtils.setMargins(vVenuesFull, 0, statusBarHeight, 0, 0);
image.png
/**
 *
 * 为某个控件设置margin
 * @param v
 * @param left
 * @param top
 * @param right
 * @param bottom
 */
public static void setMargins (View v, int left, int top, int right, int bottom) {
    if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
        p.setMargins(left, top, right, bottom);
        v.requestLayout();
    }
}

/**
 * 获取系统状态栏高度
 * @param context
 * @return
 */
public static int getStatusBarHeight(Context context) {
    int statusBarHeight = 0;
    Resources res = context.getResources();
    int resourceId = res.getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        statusBarHeight = res.getDimensionPixelSize(resourceId);
    }
    return statusBarHeight;
}

三.参考自blog.csdn.net/u013231041/…

四.随手分享,喜欢的朋友可以关注简书号MiHomes,后续会有更多更好的博客推送给您。

另:欢迎指出不足,会进行更正