在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:XPage开源软件地址:https://gitee.com/xuexiangjys/XPage开源软件介绍:XPage一个非常方便的Fragment页面框架!还不赶紧点击使用说明文档,体验一下吧! 另外,你还可以参见XPage视频教程进行学习。 关于我
X系列库快速集成为了方便大家快速集成X系列框架库,我提供了一个空壳模版供大家参考使用: https://github.com/xuexiangjys/TemplateAppProject 除此之外,我还特别制作了几期X系列视频教程供大家学习参考. 特征
Star趋势图1、演示(请star支持)Demo下载2、如何使用
2.1、Android Studio导入方法,添加Gradle依赖1.先在项目根目录的 allprojects { repositories { ... maven { url "https://jitpack.io" } }} 2.然后在dependencies添加: 以下是版本说明,选择一个即可。
dependencies { ... // XPage implementation 'com.github.xuexiangjys.XPage:xpage-lib:3.3.0' annotationProcessor 'com.github.xuexiangjys.XPage:xpage-compiler:3.3.0'} 【注意】3.3.0及以上版本去除了ButterKnife的依赖。
dependencies { ... // XPage implementation 'com.github.xuexiangjys.XPage:xpage-lib:2.3.0' annotationProcessor 'com.github.xuexiangjys.XPage:xpage-compiler:2.3.0' // 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:3.3.0' kapt 'com.github.xuexiangjys.XPage:xpage-compiler:3.3.0'} 【注意】:如果你使用的module不止一个的话,每个module下都需要增加XPage的依赖。 3.进行moduleName注册 defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments = [ moduleName : project.getName() ] } }} 【注意】:如果不注册的话,默认ModuleName为 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.自动进行页面注册【推荐】 使用apt编译时自动生成的页面注册配置类 "moduleName"+PageConfig 的getPages()进行注册。 PageConfig.getInstance()// //页面注册,默认不设置的话使用的就是自动注册// .setPageConfiguration(new AutoPageConfiguration()) .debug("PageLog") //开启调试 .setContainActivityClazz(XPageActivity.class) //设置默认的容器Activity .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") //开启调试 .init(this); //初始化页面配置 2.3、使用PageOption进行页面操作【推荐】使用 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); //打开页面进行跳转 2.4、页面跳转
2.4.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.4.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;} 2.5、TitleBar样式自定义可以设置 <!-- 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> 2.6、利用XPage来写程序的Tab主页详细可参见BottomNavigationViewFragment 就像正常使用ViewPager加载Fragment那样。但是这里需要注意的两点是:
@Overrideprotected TitleBar initTitleBar() { //不使用@Page标注的一定要注意覆盖这个方法 return null;}
PageOption.to(TestFragment.class) //新建一个容器,以不影响当前容器 .setNewActivity(true) .open(this); 2.7、复杂Activity界面容器的自定义详细可参见ComplexActivity 1.自定义页面容器的布局,在布局中一定要包含id <FrameLayout android:id="@id/fragment_container" android:layout_width="match_parent" android:layout_height="400dp"></FrameLayout> 2.在XPageActivity中设置页面容器的自定义布局 @Overrideprotected View getCustomRootView() { binding = ActivityComplexBinding.inflate(getLayoutInflater()); return binding.getRoot();} 3.使用 changePage(TestFragment.PAGE_NAME, null, CoreAnim.none); 【注意】在切换Fragment的时候,fragment并不会走onResume和onPause生命周期,建议使用onHiddenChanged代替。 4.使用 TabAFragment tabAFragment = getPage(TabAFragment.class);if (tabAFragment != null) { ToastUtils.toast(tabAFragment.getData());} else { ToastUtils.toast("页面还未加载!");} 混淆配置
# gson-keepattributes Signature-keepattributes *Annotation*-dontwarn sun.misc.**-keep class com.google.gson.examples.android.model.** { <fields>; }-keep class * extends com.google.gson.TypeAdapter-keep class * implements com.google.gson.TypeAdapterFactory-keep class * implements com.google.gson.JsonSerializer-keep class * implements com.google.gson.JsonDeserializer-keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName <fields>;}-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken# xpage-keep class com.xuexiang.xpage.annotation.** { *; }-keep class com.xuexiang.xpage.config.** { *; }
# fastjson-dontwarn com.alibaba.fastjson.**-keep class com.alibaba.fastjson.** { *; }-keepattributes Signature# xpage-keep class com.xuexiang.xpage.annotation.** { *; }-keep class com.xuexiang.xpage.config.** { *; } 特别感谢https://github.com/lizhangqu/CorePage/ 如果觉得项目还不错,可以考虑打赏一波
联系方式 |
请发表评论