XPage 一个非常方便的Android Fragment页面框架

简介: XPage 一个非常方便的Android Fragment页面框架

XPage


微信截图_20220527215957.png


一个非常方便的fragment页面框架


关于我


微信截图_20220527220042.png


特点


支持assets下“corepage.json”静态配置Fragment页面信息。


支持Application中动态配置Fragment页面信息。


支持通过注解@Page的方式动态自动配置页面信息。


支持自定义Fragment页面信息配置。


支持4种默认Fragment页面切换动画。


支持Fragment页面间参数传递。


支持Fragment页面属性保存。


支持Fragment页面的onKeyDown、onFragmentResult等生命周期


支持Fragment和Fragment页面自由跳转以及数据交互。


支持导航栏通过注解的方式自动添加及设置。


1、演示(请star支持)


20180414022339764.gif


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.3'
  annotationProcessor 'com.github.xuexiangjys.XPage:xpage-compiler:2.1.3'
  //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;
    }








相关文章
|
1月前
|
Android开发 容器
35. 【Android教程】视频页面:ViewPager
35. 【Android教程】视频页面:ViewPager
30 3
|
26天前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
27天前
|
JavaScript Java Android开发
kotlin安卓在Jetpack Compose 框架下跨组件通讯EventBus
**EventBus** 是一个Android事件总线库,简化组件间通信。要使用它,首先在Gradle中添加依赖`implementation &#39;org.greenrobot:eventbus:3.3.1&#39;`。然后,可选地定义事件类如`MessageEvent`。在活动或Fragment的`onCreate`中注册订阅者,在`onDestroy`中反注册。通过`@Subscribe`注解方法处理事件,如`onMessageEvent`。发送事件使用`EventBus.getDefault().post()`。
|
27天前
|
JavaScript 前端开发 Android开发
kotlin安卓在Jetpack Compose 框架下使用webview , 网页中的JavaScript代码如何与native交互
在Jetpack Compose中使用Kotlin创建Webview组件,设置JavaScript交互:`@Composable`函数`ComposableWebView`加载网页并启用JavaScript。通过`addJavascriptInterface`添加`WebAppInterface`类,允许JavaScript调用Android方法如播放音频。当页面加载完成时,执行`onWebViewReady`回调。
|
1月前
|
缓存 Android开发 Kotlin
【安卓app开发】kotlin Jetpack Compose框架 | 先用OKhttp下载远程音频文件再使用ExoPlayer播放
使用 Kotlin 的 Jetpack Compose 开发安卓应用时,可以结合 OkHttp 下载远程音频文件和 ExoPlayer 进行播放。在 `build.gradle` 添加相关依赖后,示例代码展示了如何下载音频并用 ExoPlayer 播放。代码包括添加依赖、下载文件、播放文件及简单的 Compose UI。注意,示例未包含完整错误处理和资源释放,实际应用需补充这些内容。
|
1月前
|
传感器 Android开发 UED
Android统一设置页面竖屏
【6月更文挑战第4天】
|
1月前
|
前端开发 JavaScript 测试技术
|
11天前
|
Android开发
Android 开发中跳转到评论页面
Android 开发中跳转到评论页面
14 0
|
2月前
|
存储 编解码 API
Android Media Framework(一)OpenMAX 框架简介
OpenMAX IL是Khronos Group为嵌入式和移动设备设计的低层级接口,用于统一调用音频、视频和图像编解码器,确保跨平台兼容性。它包括Core API(管理组件加载和方法调用)和Component API(组件实现,如源、接收器、编解码器等)。组件通过端口进行数据交互,客户端使用Core API加载和控制组件。Android引入OMX IL以支持不同芯片上的编解码器。组件状态包括Loaded、Idle、Executing和Invalid。组件架构涉及参数配置、命令处理和缓冲区管理,数据交换通过回调函数完成,端口持有预分配或组件自分配的缓冲区。