同步操作将从 xuexiangjys/XPage 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
一个非常方便的fragment页面框架
为了方便大家快速集成X系列框架库,我提供了一个空壳模版供大家参考使用: https://github.com/xuexiangjys/TemplateAppProject
目前支持主流开发工具AndroidStudio的使用,直接配置build.gradle,增加依赖即可.
1.先在项目根目录的 build.gradle 的 repositories 添加:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
2.然后在dependencies添加:
dependencies {
...
//XPage
implementation 'com.github.xuexiangjys.XPage:xpage-lib:2.2.9'
annotationProcessor 'com.github.xuexiangjys.XPage:xpage-compiler:2.2.9'
//ButterKnife的sdk
implementation 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
}
【注意】如果你使用的是kotlin,请使用如下配置:
apply plugin: 'kotlin-kapt'
dependencies {
...
//XPage
implementation 'com.github.xuexiangjys.XPage:xpage-lib:2.2.9'
kapt 'com.github.xuexiangjys.XPage:xpage-compiler:2.2.9'
//ButterKnife的sdk
implementation 'com.jakewharton:butterknife:8.4.0'
kapt 'com.jakewharton:butterknife-compiler:8.4.0'
}
【注意】如果你的项目使用的是androidx
,请在项目根目录的gradle.properties
做如下配置:
# 表示主工程使用AndroidX形式
android.useAndroidX=true
# 表示针对主工程中使用到的三方库,也会自动执行AndroidX的替换过程。
android.enableJetifier=true
3.进行moduleName注册
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
}
【注意】:如果不注册的话,默认ModuleName为app
。
在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的值"
}
},
]
1.自动进行页面注册【推荐】
使用apt编译时自动生成的页面注册配置类 "moduleName"+PageConfig 的getPages()进行注册。
PageConfig.getInstance()
.setPageConfiguration(new PageConfiguration() { //页面注册
@Override
public List<PageInfo> registerPages(Context context) {
//自动注册页面,是编译时自动生成的,build一下就出来了。如果你还没使用@Page的话,暂时是不会生成的。
return AppPageConfig.getInstance().getPages(); //自动注册页面
}
})
.debug("PageLog") //开启调试
.setContainActivityClazz(XPageActivity.class) //设置默认的容器Activity
.enableWatcher(false) //设置是否开启内存泄露监测
.init(this); //初始化页面配置
【注意】:如果你的项目中只是增加了依赖,还没有使用@Page注解XPageFragment页面的话,在编译时是不会自动生成注册页面的!!
2.手动动态进行页面注册
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") //开启调试
.enableWatcher(false) //设置是否开启内存泄露监测
.init(this); //初始化页面配置
使用PageOption.to
进行页面选项构建。
PageOption.to(TestFragment.class) //跳转的fragment
.setAnim(CoreAnim.zoom) //页面跳转动画
.setRequestCode(100) //请求码,用于返回结果
.setAddToBackStack(true) //是否加入堆栈
.setNewActivity(true, ContainActivity.class) //是否使用新的Activity打开
.putBoolean(DateReceiveFragment.KEY_IS_NEED_BACK, true) //传递的参数
.open(this); //打开页面进行跳转
使用XPage,Activity必须要继承
XPageActivity
,Fragment必须要继承XPageFragment
,否则将无法调用页面跳转的openPage
方法。
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;
}
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;
}
可以设置XPageTitleBarStyle
主题样式来自定义标题栏的默认样式。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/xpage_default_actionbar_color</item>
<item name="colorPrimaryDark">@color/xpage_default_actionbar_color</item>
<item name="colorAccent">@color/xpage_default_actionbar_color</item>
<!--标题栏的背景图片,优先使用背景图片,没有背景图片才使用背景颜色,可选-->
<item name="xpage_actionbar_background">@null</item>
<!--标题栏的背景颜色-->
<item name="xpage_actionbar_color">@color/xpage_default_actionbar_color</item>
<!--是否支持沉浸式标题栏, 默认false-->
<item name="xpage_actionbar_immersive">false</item>
<!--标题栏返回箭头, 默认R.drawable.xpage_ic_navigation_back_white-->
<item name="xpage_actionbar_navigation_back">@drawable/xpage_ic_navigation_back_white</item>
<!--标题栏的高度,默认52dp-->
<item name="xpage_actionbar_height">60dp</item>
<!--标题栏标题文字的大小,默认18sp-->
<item name="xpage_actionbar_title_text_size">21sp</item>
<!--标题栏副标题文字的大小,默认12sp-->
<item name="xpage_actionbar_sub_text_size">14sp</item>
<!--标题栏动作文字的大小,默认15sp-->
<item name="xpage_actionbar_action_text_size">18sp</item>
<!--标题栏动作图片的padding,默认5dp-->
<item name="xpage_actionbar_action_padding">6dp</item>
<!--标题栏两侧文字的padding,默认14dp-->
<item name="xpage_actionbar_side_text_padding">16dp</item>
<item name="XPageTitleBarStyle">@style/XPageTitleBar.Custom</item>
</style>
<style name="XPageTitleBar.Custom">
<item name="tb_immersive">false</item>
<item name="tb_centerGravity">center</item>
</style>
详细可参见BottomNavigationViewFragment
就像正常使用ViewPager加载Fragment那样。但是这里需要注意的两点是:
@Override
protected TitleBar initTitleBar() {
//不使用@Page标注的一定要注意覆盖这个方法
return null;
}
PageOption.to(TestFragment.class)
//新建一个容器,以不影响当前容器
.setNewActivity(true)
.open(this);
详细可参见ComplexActivity
1.自定义页面容器的布局,在布局中一定要包含idfragment_container
。
<FrameLayout
android:id="@id/fragment_container"
android:layout_width="match_parent"
android:layout_height="400dp">
</FrameLayout>
2.在XPageActivity中设置页面容器的布局ID
@Override
protected int getLayoutId() {
return R.layout.activity_complex;
}
3.使用changePage
方法切换Fragment。
changePage(TestFragment.PAGE_NAME, null, CoreAnim.none);
【注意】在切换Fragment的时候,fragment并不会走onResume和onPause生命周期,建议使用onHiddenChanged代替。
4.使用getPage
方法获取指定的Fragment,就可以获取该fragment页面中的数据。
TabAFragment tabAFragment = getPage(TabAFragment.class);
if (tabAFragment != null) {
ToastUtils.toast(tabAFragment.getData());
} else {
ToastUtils.toast("页面还未加载!");
}
# fastjson
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *; }
-keepattributes Signature
# xpage
-keep class com.xuexiang.xpage.annotation.** { *; }
https://github.com/lizhangqu/CorePage/
你的打赏是我维护的动力,我将会列出所有打赏人员的清单在下方作为凭证,打赏前请留下打赏项目的备注!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。