1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xuexiangjys-XPage

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Перевод текста на русский язык:

Открыть отладку

.setContainActivityClazz(XPageActivity.class) // Установить класс контейнера активности по умолчанию
.init(this); // Инициализировать конфигурацию страницы

Примечание: если в вашем проекте только добавлена зависимость, но не используется аннотация @Page для фрагмента XPageFragment, то при компиляции страница регистрации не будет создана автоматически!

  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.3. Использование PageOption для операций со страницами (рекомендуется)

Используйте PageOption.to для создания опций страницы.

PageOption.to(TestFragment.class) // Фрагмент перехода
    .setAnim(CoreAnim.zoom) // Анимация перехода страницы
    .setRequestCode(100) // Код запроса, используемый для возврата результата
    .setAddToBackStack(true) // Добавлять ли в стек
    .setNewActivity(true, ContainActivity.class) // Использовать ли новую активность для открытия
    .putBoolean(DateReceiveFragment.KEY_IS_NEED_BACK, true) // Передаваемый параметр
    .open(this); // Открыть страницу и перейти

2.4. Переход на страницу

Используйте XPage, чтобы Activity наследовала XPageActivity, а Fragment — XPageFragment, иначе невозможно будет вызвать метод openPage для перехода на страницу.

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

Можно установить стиль темы XPageTitleBarStyle, чтобы настроить стиль заголовка по умолчанию.

<!-- Базовая тема приложения. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Настройте свою тему здесь. -->
    <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>
    <!-- Отступ изображения действия панели действий, по умолчанию 5dp -->
    <item name="xpage_actionbar_action_padding">6dp</item>
    <!-- Отступы текста по бокам панели действий, по умолчанию 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> ### 2.6. Использование XPage для написания программы Tab главной страницы

Подробнее см. BottomNavigationViewFragment (https://github.com/xuexiangjys/XPage/blob/master/app/src/main/java/com/xuexiang/xpagedemo/fragment/BottomNavigationViewFragment.java).

По аналогии с обычным использованием ViewPager для загрузки Fragment. Однако здесь необходимо обратить внимание на два момента:

* Поскольку используется ViewPager для загрузки, а не XPage, метод initTitleBar фрагмента должен быть перекрыт.

@Override protected TitleBar initTitleBar() { // Не использовать @Page аннотацию, обязательно обратите внимание на перекрытие этого метода return null; }


* Чтобы новая страница не влияла на состояние текущего контейнера Tab главной страницы, необходимо использовать новый контейнер при открытии новой страницы.

PageOption.to(TestFragment.class) // Новый контейнер, чтобы не влиять на текущий контейнер .setNewActivity(true) .open(this);


### 2.7. Пользовательский интерфейс Activity сложного контейнера

Подробнее см. ComplexActivity (https://github.com/xuexiangjys/XPage/blob/master/app/src/main/java/com/xuexiang/xpagedemo/ComplexActivity.java).

1. Настройте макет контейнера страницы в макете, обязательно включите id fragment_container.


2. В XPageActivity настройте пользовательский макет контейнера страницы.

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


3. Используйте метод changePage для переключения Fragment.

changePage(TestFragment.PAGE_NAME, null, CoreAnim.none);


Обратите внимание, что при переключении Fragment жизненный цикл onResume и onPause фрагмента не будет выполняться, рекомендуется использовать onHiddenChanged вместо него.

4. Используйте метод getPage для получения указанного Fragment, вы можете получить данные этой страницы Fragment.

TabAFragment tabAFragment = getPage(TabAFragment.class); if (tabAFragment != null) { ToastUtils.toast(tabAFragment.getData()); } else { ToastUtils.toast("Страница еще не загружена!"); }


## Конфигурация запутывания

* Начиная с версии 3.2.0, используется сериализация gson, поэтому конфигурация следующая:

gson

-keepattributes Signature -keepattributes Annotation -dontwarn sun.misc.** -keep class com.google.gson.examples.android.model.** { ; } -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 ; } -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.* { *; }


* До версии 3.1.1 используется сериализация fastjson, поэтому конфигурация следующая:

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/

Если вам нравится проект, рассмотрите возможность его поддержки.

> Ваша поддержка — это моя мотивация, я опубликую список всех поддерживающих людей в качестве доказательства, пожалуйста, оставьте комментарий к поддержке перед тем, как поддержать!

![pay.png](https://raw.githubusercontent.com/xuexiangjys/Resource/master/img/pay/pay.png)

## Контакты

[![](https://img.shields.io/badge/нажмите%20одну%20кнопку%2C%20чтобы%20присоединиться%20к%20группе%20QQ%20обмена-602082750-blue.svg)](http://shang.qq.com/wpa/qunwpa?idkey=9922861ef85c19f1575aecea0e8680f60d9386080a97ed310c971ae074998887)

![](https://s1.ax1x.com/2022/04/27/LbGMJH.jpg)

[download-svg]: https://img.shields.io/badge/downloads-1M-blue.svg
[download-url]: https://github.com/xuexiangjys/XPage/blob/master/apk/xpage_demo.apk?raw=true
[download-img]: ./img/download.png

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Очень удобный framework для fragment-страниц. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xuexiangjys-XPage.git
git@api.gitlife.ru:oschina-mirror/xuexiangjys-XPage.git
oschina-mirror
xuexiangjys-XPage
xuexiangjys-XPage
master