Skip to content

进阶使用

xuexiangjys edited this page Aug 8, 2021 · 2 revisions

使用PageOption进行页面操作【推荐】

使用PageOption.to进行页面选项构建。

  • setAnim: 设置页面转场动画
  • setRequestCode: 设置页面打开的请求码,用于返回结果
  • setAddToBackStack: 设置是否加入堆栈
  • setNewActivity: 设置是否使用新的Activity打开
  • setContainActivityClazz:设置新打开Activity的容器
  • putBoolean、putString、putAll等:设置传递的参数
  • open:打开页面进行跳转
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); //打开页面进行跳转

自定义TitleBar样式

可以设置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>

利用XPage来写程序的Tab主页

详细可参见BottomNavigationViewFragment

就像正常使用ViewPager加载Fragment那样。但是这里需要注意的两点是:

  • 由于使用ViewPager进行加载,而非XPage,因此Fragment的initTitleBar方法需要被覆盖。
@Override
protected TitleBar initTitleBar() {
    //不使用@Page标注的一定要注意覆盖这个方法
    return null;
}
  • 由于为了新开页面不影响Tab主页当前容器的状态,需要在打开新页面的使用设置使用新容器。
PageOption.to(TestFragment.class)
        //新建一个容器,以不影响当前容器
        .setNewActivity(true)
        .open(this);

复杂Activity界面容器的自定义

详细可参见ComplexActivity

1.自定义页面容器的布局,在布局中一定要包含idfragment_container

<FrameLayout
    android:id="@id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="400dp">
</FrameLayout>

2.在XPageActivity中设置页面容器的自定义布局

@Override
protected View getCustomRootView() {
    binding = ActivityComplexBinding.inflate(getLayoutInflater());
    return binding.getRoot();
}

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("页面还未加载!");
}