Android 之路 (10) - 集成滑動返回(SwipeBackLayout)

引言

滑動返回不說是App的標配,但起碼也是非常常見的功能了,本章主要講解集成一個開源的滑動返回庫:SwipeBackLayout。抱歉,本篇不是造輪子的文章。

正文

關于SwipeBackLayout的集成,我這里不打算使用依賴的方式集成,而是采用源碼的方式進行集成,因為后續我還需要對Base進行擴展,需要修改一些源碼。

集成源碼

將源碼下載下來,在core下面新建一個swipebacklayout包,將源碼copy進去。

image

更改SwipeBackActivity

SwipeBackActivity重寫了findViewById()這個方法,在API-26中加入了泛型T extends View,所以需要更改一下源碼,低于這個版本的API是不需要更改的。

 @Override
    public <T extends View> T findViewById(int id) {
        T v = super.findViewById(id);
        if (v == null && mHelper != null)
            return (T) mHelper.findViewById(id);
        return v;
    }

//    @Override
//    public View findViewById(int id) {
//        View v = super.findViewById(id);
//        if (v == null && mHelper != null)
//            return mHelper.findViewById(id);
//        return v;
//    }

初始化SwipeBackLayout

將CandyBaseActivity更改為繼承SwipeBackActivity,然后在onCreate()初始化滑動的模式。

private void initSwipeActivity() {
        getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);
    }

演示

image

其他問題

禁用滑動返回

某些頁面是不需要滑動返回的,比如說主頁面,這時候可以通過以下方法來禁用:

getSwipeBackLayout().setEnableGesture(false);

滑動時背景是黑色或者全透明

在某些機型上面滑動的時候背景是純黑色的,或者是全透明能看到桌面,這種情況可以通過設置不同的樣式來解決:

1.首先設置背景透明

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

2.再給啟動APP時的Activity單獨設置不透明

 <style name="AppThemeMain" parent="AppTheme">
        <item name="android:windowIsTranslucent">false</item>
 </style>
  1. AndroidManifest.xml中單獨設置不透明的背景風格
<activity android:name=".main.activity.MainActivity"
               android:theme="@style/AppThemeMain"
               android:launchMode="singleTask">
        <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
</activity>

結束

總結

本文篇幅較少,只做了集成介紹和一個小問題的解決方案。
源碼-tag-v0.10

遺留問題

本篇中的側滑返回并沒有適配沉浸式,也就是我們的狀態欄并沒有和滑動返回同步。

image

所以下章將解決和適配這個問題

微信公眾號

來都來了,就給個關注吧,時不時會悄悄的推送一些小技巧的文章~~


AndroidRookie
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。