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

OSCHINA-MIRROR/scwang90-SmartRefreshLayout

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 24 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 19:29 a9766b7

Android智能下拉刷新框架 — SmartRefreshLayout

License Arsenal Maven MinSdk Methods

English 中文

SmartRefreshLayout создан с целью создания мощного, стабильного и зрелого фреймворка для обновления данных. Он включает в себя различные стильные, разнообразные, практичные и красивые Header и Footer.

Как следует из названия, SmartRefreshLayout — это «умный» или «интеллектуальный» фреймворк для обновления. Благодаря своей «умности», он не только поддерживает все виды View, но и поддерживает многоуровневую структуру вложенных представлений.

Он наследуется от ViewGroup, а не от FrameLayout или LinearLayout, что повышает производительность. Также были учтены преимущества популярных фреймворков для обновления, таких как SwipeRefreshLayout от Google и Ultra-Pull-To-Refresh и TwinklingRefreshLayout от других разработчиков. Кроме того, он включает в себя множество стильных Header и Footer.

Версия для iOS: ссылка.

Из-за ограничений GitHub, связанных с географическим положением, скорость загрузки может быть низкой, а изображения могут быть недоступны. Рекомендуется использовать внутреннее зеркало.

Особенности и функции:

  • Поддержка мультитач.
  • Поддержка обновления второго уровня.
  • Поддержка многоуровневой структуры вложенных представлений (LinearLayout, FrameLayout и т. д.).
  • Поддержка всех видов View (AbsListView, RecyclerView, WebView и т.д.).
  • Возможность настройки и уже встроенные разнообразные стильные Header и Footer.
  • Синхронная прокрутка с ListView и вложенная прокрутка с CoordinatorLayout.
  • Автоматическое обновление и автоматическая загрузка при подъёме (автоматическое обнаружение инерции прокрутки списка до конца без необходимости ручного подъёма).
  • Настройка интерполяции для анимации отскока, позволяющая создавать разнообразные анимационные эффекты.
  • Адаптация к различным сценариям приложений без использования сложных и неудобных элементов дизайна.
  • Несколько способов прокрутки: сдвиг, растяжение, фиксированный фон, фиксированный верхний слой, полноэкранный режим.
  • Отскок за пределами прокручиваемых представлений для всех прокручиваемых видов.
  • Обмен и смешивание Header и Footer.
  • Совместимость с AndroidX.
  • Горизонтальное обновление.
  • Версия для iOS.

Ссылки:

Демо: Скачать APK-демо.

Проект демонстрации:

Личная домашняя страница Список Weibo
Ресторанный и ресторанный Личный центр
:---: :---:

Демонстрация стиля:

Доставка Dropbox
Refresh-your-delivery Dropbox-Refresh

Два вышеприведённых примера были созданы мной лично, а следующие два являются результатом моей собственной реализации и оптимизации других выдающихся Header, найденных на GitHub:

БезьеРадар БезьеКруг
Pull To Refresh Pull Down To Refresh
FlyRefresh Классика
:---: :---:

Увидев так много великолепных Header, разве вы не думаете, что это здорово? В этот момент вы, возможно, беспокоитесь о том, что так много Header будет интегрировано вместе, но в повседневной жизни вам понадобится только один из них, не придётся ли вам включать много ненужного кода и ресурсов?

В версии V2.x библиотеки зависимостей были разделены на 8 пакетов, и вы можете ссылаться на них по мере необходимости!

  • refresh-layout-kernel — ядро, которое необходимо зависит;
  • refresh-header-classics — классический Header обновления;
  • refresh-header-radar — радарный Header обновления;
  • refresh-header-falsify — ложный Header обновления;
  • refresh-header-material — материальный Header обновления от Google;
  • refresh-header-two-level — двухуровневый Header обновления;
  • refresh-footer-ball — шаровой импульс загрузки;
  • refresh-footer-classics — классическая загрузка.

Простой пример использования

1. Добавьте зависимости в build.gradle

implementation 'androidx.appcompat:appcompat:1.0.0' // Обязательно 1.0.0 или выше

implementation  'io.github.scwang90:refresh-layout-kernel:2.0.6' // Ядро, которое обязательно зависит
implementation  'io.github.scwang90:refresh-header-classics:2.0.6'  // Классический Header обновления
implementation  'io.github.scwang90:refresh-header-radar:2.0.6'     // Радарный Header обновления
implementation  'io.github.scwang90:refresh-header-falsify:2.0.6'   // Ложный Header обновления
implementation  'io.github.scwang90:refresh-header-material:2.0.6'  // Материальный Header обновления от Google
implementation  'io.github.scwang90:refresh-header-two-level:2.0.6'  // Двухуровневый Header обновления
implementation  'io.github.scwang90:refresh-footer-ball:2.0.6'      // Шаровой импульс загрузки
implementation  'io.github.scwang90:refresh-footer-classics:2.0.6'   // Классическая загрузка

Если вы используете AndroidX, сначала добавьте две строки в gradle.properties:

android.useAndroidX=true
android.enableJetifier=true

2. Добавьте SmartRefreshLayout в XML-файл макета

<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smart.refresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.scwang.smart.refresh.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:background="#fff" />
    <com.scwang.smart.refresh.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>

3. Добавьте код в Activity или Fragment

RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setRefreshHeader(new ClassicsHeader(this));
refreshLayout.setRefreshFooter(new ClassicsFooter(this));
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
    @Override
    public void onRefresh(RefreshLayout refreshlayout) {

*Примечание: данный перевод может содержать неточности.* Использование указанных Header и Footer

1. Метод один: глобальная настройка

    ```java
    public class App extends Application {
        //static код может предотвратить утечку памяти
        static {
            //устанавливаем глобальный конструктор заголовка обновления
            SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
                @Override
                public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                    layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white); //глобально устанавливаем основную тему цвета
                    return new ClassicsHeader(context); //.setTimeFormat(new DynamicTimeFormat("обновлено %s")); //указываем классический заголовок, по умолчанию это радарный заголовок Бёрста
                }
            });
            //устанавливаем глобального конструктора нижнего колонтитула обновления
            SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
                @Override
                public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                    //указываем классический нижний колонтитул, по умолчанию это нижний колонтитул BallPulseFooter
                    return new ClassicsFooter(context).setDrawableSize(20);
                }
            });
        }
    }
    ```

**Примечание:** настройки заголовка и нижнего колонтитула с помощью метода один имеют самый низкий приоритет, если также используются методы два и три, они будут заменены другими методами.

2. Метод два: указание в XML-файле макета

```xml
<com.scwang.smart.refresh.layout.SmartRefreshLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#444444"
    app:srlPrimaryColor="#444444"
    app:srlAccentColor="@android:color/white"
    app:srlEnablePreviewInEditMode="true">
    <!--srlAccentColor srlPrimaryColor изменит основную тему цветов заголовка и нижнего колонтитула-->
    <!--srlEnablePreviewInEditMode можно включить и отключить функцию предварительного просмотра-->
    <com.scwang.smart.refresh.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/dimenPaddingCommon"
        android:background="@android:color/white"
        android:text="@string/description_define_in_xml"/>
    <com.scwang.smart.refresh.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>

Примечание: настройки заголовка и нижнего колонтитула методом два имеют средний приоритет и будут перекрыты методом три. Кроме того, при использовании этого метода Android Studio будет иметь эффект предварительного просмотра, как показано на рисунке ниже.

Не беспокойтесь, это просто эффект предварительного просмотра. Он появится только после того, как вы потянете вниз.

  1. Метод три: настройка с использованием Java-кода
final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
//установить заголовок в виде радара Бёрста
refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true));
//установить нижний колонтитул в виде шарового импульса
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
  1. Дополнительные инструкции по использованию

О запутывании кода

SmartRefreshLayout не требует добавления запутанного кода фильтрации и уже прошёл тест на запутывание. Если у вас возникнут проблемы после запутывания в вашем проекте, пожалуйста, сообщите мне как можно скорее.

Пожертвования

Если вам нравится дизайн SmartRefreshLayout и вы считаете, что он вам помог, вы можете поддержать его, нажав «Star» в правом верхнем углу. Спасибо! ^_^ Вы также можете отсканировать следующие QR-коды. Пожалуйста, поддержите автора чашкой кофе.

Если вы хотите получить дополнительную помощь после пожертвования, вы можете присоединиться к платной группе вместо обычного пожертвования. Платная группа может напрямую получать помощь от автора и обратную связь по вопросам.

Если вы оставите своё имя в комментарии к пожертвованию, оно будет записано в список. Если вы также являетесь автором GitHub, вы можете оставить адрес своего проекта или личную домашнюю страницу в комментарии к пожертвованию. Ссылка будет добавлена в список для взаимного продвижения. Список пожертвований

Ссылки на дружественные проекты

  • Примечание: в данном тексте могут быть неточности перевода, связанные с особенностями исходного текста. ## Обсуждение

QQ решение группы — 602537182 (платное)

Вступление в группу

С момента создания группы многие друзья задавали вопросы, и я решил множество проблем. Большинство из них были вызваны ошибками в этой библиотеке, а некоторые были связаны с проблемами среды проекта пользователя. Это заняло у меня много времени. После моего наблюдения и тестирования я заметил, что количество ошибок в библиотеке становится всё меньше. Конечно, нельзя сказать, что их совсем нет, но библиотека уже может удовлетворить большинство потребностей проектов. Поэтому я принял решение: изменить предыдущую дискуссионную группу на группу решения проблем и открыть платную функцию вступления. Группа предназначена для решения проблем, с которыми сталкиваются пользователи при использовании библиотеки, будь то ошибки в самой библиотеке или проблемы со специфической средой проекта (включая ошибки самого проекта). У меня есть своя работа и время для отдыха. Только если вы понимаете и поддерживаете меня, я могу сосредоточиться на решении ваших проблем. Однако не беспокойтесь, я создал ещё одну бесплатную дискуссионную QQ-группу.

Дискуссионная группа QQ — 914275312 (новая), 477963933 (полная), 538979188 (полная)

Вступление в группу

Эта группа бесплатна для вступления, и вы можете обсуждать здесь использование и проблемы, связанные с библиотекой. Я также буду решать проблемы в группе. Если проблема не может быть решена членами группы, мне потребуется более пяти минут, чтобы решить её (исключая ошибки библиотеки). Я не буду заниматься решением таких проблем. Если проект срочный, пожалуйста, оплатите участие в группе решения проблем (обратите внимание, что в платной группе я буду очень серьёзно и усердно работать над решением проблем, но не могу гарантировать идеальное решение). Или рассмотрите возможность использования других обновлённых библиотек.

Напоминание

Ответы на вопросы о вступлении можно найти в этом документе.

Другие работы

MultiWaveHeader
SmartRefreshHorizontal
Поэзия и Даль

Благодарности

SwipeRefreshLayout
Ultra-Pull-To-Refresh
TwinklingRefreshLayout
BeautifulRefreshLayout

License

Copyright 2017 scwang90

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/scwang90-SmartRefreshLayout.git
git@api.gitlife.ru:oschina-mirror/scwang90-SmartRefreshLayout.git
oschina-mirror
scwang90-SmartRefreshLayout
scwang90-SmartRefreshLayout
main