XPage
[![api][apisvg]][api]
一個非常方便的fragment頁面框架
特點
- 支持assets下“corepage.json”靜態配置Fragment頁面信息。
- 支持Application中動態配置Fragment頁面信息。
- 支持通過注解@Page的方式動態自動配置頁面信息。
- 支持自定義Fragment頁面信息配置。
- 支持4種默認Fragment頁面切換動畫。
- 支持Fragment頁面間參數傳遞。
- 支持Fragment頁面屬性保存。
- 支持Fragment頁面的onKeyDown、onFragmentResult等生命周期
- 支持Fragment和Fragment頁面自由跳轉以及數據交互。
- 支持導航欄通過注解的方式自動添加及設置。
1、演示
2、如何使用
目前支持主流開發工具AndroidStudio的使用,直接配置build.gradle,增加依賴即可.
2.1、Android Studio導入方法,添加Gradle依賴
1.先在項目根目錄的 build.gradle 的 repositories 添加:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
2.然后在dependencies添加:
dependencies {
...
//XPage
implementation 'com.github.xuexiangjys.XPage:xpage-lib:2.1.4'
annotationProcessor 'com.github.xuexiangjys.XPage:xpage-compiler:2.1.4'
//butterknife的sdk
implementation 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
//leak
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
}
3.進行moduleName注冊
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
}
2.2、頁面注冊
2.2.1、assets中注冊
在assets文件夾中新建“corepage.json“,然后進行如下配置:
[
{
"name": "測試頁面1",
"classPath": "com.xuexiang.xpagedemo.fragment.TestFragment1",
"params": ""
},
{
"name": "測試頁面2",
"classPath": "com.xuexiang.xpagedemo.fragment.TestFragment2",
"params": {
"key1":"這是參數1的值",
"key2":"這是參數2的值"
}
},
]
2.2.2、Application中注冊
1.手動動態進行頁面注冊
PageConfig.getInstance().setPageConfiguration(new PageConfiguration() {
@Override
public List<PageInfo> registerPages(Context context) {
List<PageInfo> pageInfos = new ArrayList<>();
addPageInfoAndSubPages(pageInfos, MainFragment.class);
pageInfos.add(PageConfig.getPageInfo(DateReceiveFragment.class));
return pageInfos;
}
}).debug("PageLog").init(this);
2.自動進行頁面注冊
使用apt自動生成的頁面注冊配置類 "moduleName"+PageConfig 的getPages()進行注冊。
PageConfig.getInstance().setPageConfiguration(new PageConfiguration() {
@Override
public List<PageInfo> registerPages(Context context) {
return AppPageConfig.getInstance().getPages();
}
}).debug("PageLog").init(this);
2.3、頁面跳轉
2.3.1、攜帶數據
Bundle params = new Bundle();
switch(position) {
case 0:
params.putBoolean(DateReceiveFragment.KEY_IS_NEED_BACK, false);
int id = (int) (Math.random() * 100);
params.putString(DateReceiveFragment.KEY_EVENT_NAME, "事件" + id);
params.putString(DateReceiveFragment.KEY_EVENT_DATA, "事件" + id + "攜帶的數據");
openPage(DateReceiveFragment.class, params);
break;
case 1:
params.putBoolean(DateReceiveFragment.KEY_IS_NEED_BACK, true);
openPageForResult(DateReceiveFragment.class, params, 100);
break;
default:
break;
}
2.3.2、頁面切換動畫
switch(position) {
case 0:
openPage(TestFragment.PAGE_NAME, null, CoreAnim.none);//沒有動畫
break;
case 1:
openPage(TestFragment.PAGE_NAME, null, CoreAnim.present);//由下到上動畫
break;
case 2:
openPage(TestFragment.PAGE_NAME, null, CoreAnim.slide);//從左到右動畫
break;
case 3:
openPage(TestFragment.PAGE_NAME, null, CoreAnim.fade);//漸變
break;
case 4:
openPage(TestFragment.PAGE_NAME, null, CoreAnim.zoom);//放大
break;
default:
break;
}
3 項目文件截圖
特別感謝
https://github.com/lizhangqu/CorePage/
聯系方式
XPage的使用示范例子
注:本文著作權歸作者,由demo大師代發,拒絕轉載,轉載需要作者授權