引言
滑動返回不說是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>
- 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