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

OSCHINA-MIRROR/JackieFu-smartrefreshlayout

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

Android智能下拉刷新框架 — SmartRefreshLayout

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

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

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

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

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

Для получения дополнительной информации посетите следующие ресурсы:

  • Документация по свойствам;
  • Часто задаваемые вопросы;
  • Интеллектуальные особенности;
  • Журнал обновлений;
  • Статьи в блоге;
  • Загрузка исходного кода;
  • Многоточечное касание;
  • Пользовательские Header.

Также доступны демонстрационные APK и примеры использования фреймворка в реальных приложениях. |FlyRefresh| |[https://github.com/race604/FlyRefresh]|

|ClassicsHeader|#1|

Phoenix Taurus
Yalantis/Phoenix Yalantis/Taurus
BattleCity HitBlock
FunGame/BattleCity FunGame/HitBlock
WaveSwipe Material
WaveSwipeRefreshLayout MaterialHeader
StoreHouse WaterDrop
CRefreshLayout WaterDrop

Увидев так много великолепных Headers, разве вы не думаете, что это здорово? В этот момент вы можете беспокоиться о том, что так много Headers объединены вместе, но в действительности вы будете использовать только один из них, и вам придётся включать много ненужного кода и ресурсов? В версии 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 — шаровой импульс Footer загрузки;
  • refresh-footer-classics — классический Footer загрузки.

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

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

V1.1.0 Если вы используете версию 1.x, пожалуйста, переключитесь, текущая версия 2.0 была переработана и не поддерживает обновление, рекомендуется использовать её в новых проектах.

Версия 2.x относительно версии 1.x изменила имена пакетов, например, com.scwang.smartrefresh был изменён на com.scwang.smart.refresh. Рекомендуется использовать его в новом проекте, если проект обновляется, java и xml должны быть заменены именами пакетов, что довольно хлопотно. Однако основное изменение заключается в разделении Smart на пакеты, уменьшении ненужных зависимостей, таких как отсутствие необходимости в использовании двухуровневого обновления, чтобы избежать избыточности кода. Тем не менее, SmartRefreshHeader не был разделён на пакеты, и в нём есть более десяти Headers, поэтому рекомендуется скопировать исходный код нужного Header в проект. Конечно, вы также можете обсудить и проголосовать за выбор наиболее часто используемых Headers в разделе обсуждения, а затем разделить их отдельно.

compile 'com.android.support:appcompat-v7:25.3.1'                   //обязательно 25.3.1 или выше

// Обратите внимание: после разделения пакетов не будет автоматически добавляться ни один из стандартных Headers или Footers, всё ещё используются три метода!
implementation  'com.scwang.smart:refresh-layout-kernel:2.0.1'      //обязательная зависимость ядра
implementation  'com.scwang.smart:refresh-header-classics:2.0.1'    //классический Header обновления
implementation  'com.scwang.smart:refresh-header-radar:2.0.1'       //Header обновления типа «радар»
implementation  'com.scwang.smart:refresh-header-falsify:2.0.1'     //виртуальный Header обновления
implementation  'com.scwang.smart:refresh-header-material:2.0.1'    //Header обновления Google
implementation  'com.scwang.smart:refresh-header-two-level:2.0.1'   //двухуровневый Header обновления
implementation  'com.scwang.smart:refresh-footer-ball:2.0.1'        //шаровой импульс Footer загрузки
implementation  'com.scwang.smart:refresh-footer-classics:2.0.1'    //классический Footer загрузки

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

android.useAndroidX=true
android.enableJetifier=true

Вам нужно зависеть от androidx.appcompat

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

implementation  'com.scwang.smart:refresh-layout-kernel:2.0.1'      //обязательная зависимость ядра
implementation  'com.scwang.smart:refresh-header-classics:2.0.1'    //классический Header обновления
implementation  'com.scwang.smart:refresh-header-radar:2.0.1'       //Header обновления типа «радар»
implementation  'com.scwang.smart:refresh-header-falsify:2.0.1'     //виртуальный Header обновления
implementation  'com.scwang.smart:refresh-header-material:2.0.1'    //Header обновления Google
implementation  'com.scwang.smart:refresh-header-two-level:2.0.1'   //двухуровневый Header обновления
implementation  'com.scwang.smart:refresh-footer-ball:2.0.1'        //шаровой импульс Footer загрузки
implementation  'com.scwang.smart:refresh-footer-classics:2.0.1'    //классический Footer загрузки

#### 2. Добавьте SmartRefreshLayout в XML-файл макета
```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"/>
    <android.support.v7.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) {
        refreshlayout.finishRefresh(2000/*,false*/);//передаём false, чтобы указать на неудачное обновление
    }
});
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
    @Override
    public void onLoadMore(RefreshLayout refreshlayout) {
        refreshlayout.finishLoadMore(2000/*,false*/);//передаём false, чтобы указать на неудачную загрузку
    }
});

Использование указанных Header и Footer

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

public class App extends Application {
    //статический код может предотвратить утечку памяти
    static {
        //устанавливаем глобального создателя Header
        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"));//указываем классический Header, по умолчанию это Header в стиле радара Безиера
                }
            });
        //устанавливаем глобального создателя Footer
        SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
                @Override
                public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                    //указываем классический Footer, по умолчанию это BallPulseFooter
                    return new ClassicsFooter(context).setDrawableSize(20);
                }
            });
    }
}

Обратите внимание: Header и Footer, установленные методом один, имеют самый низкий приоритет, и если также используются методы два и три, они будут заменены.

2. Метод два: настройка в 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 изменит основную тему цветов Header и Footer-->
    <!--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>

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

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

3. Метод три: настройка с помощью Java-кода

final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
//устанавливаем Header в виде радара Безиера
refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true));
//устанавливаем Footer в виде шарового импульса
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setDrawableSize(15));
``` **BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));**

4. 更多使用说明
- [Свойства документа](https://github.com/scwang90/SmartRefreshLayout/blob/master/art/md_property.md)
- [Частые вопросы](https://github.com/scwang90/SmartRefreshLayout/blob/master/art/md_faq.md)
- [Пользовательский заголовок](https://github.com/scwang90/SmartRefreshLayout/blob/master/art/md_custom.md)

**Спуфинг**

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

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

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

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

Если вы оставите комментарий с именем в пожертвовании, он будет записан в список. Если вы также являетесь автором открытого исходного кода GitHub, вы можете оставить адрес проекта или личную домашнюю страницу в пожертвовании. Ссылка будет добавлена ​​в список для взаимного продвижения.
[Список пожертвований](https://github.com/scwang90/SmartRefreshLayout/blob/master/art/md_donationlist.md)

**Дружественные ссылки**
[github/Loror](https://github.com/Loror)  
[github/faith-hb/WidgetCase](https://github.com/faith-hb/WidgetCase)  
[github/Bamboy120315/Freedom](https://github.com/Bamboy120315/Freedom)  
[github/TommyLemon/APIJSON](https://github.com/TommyLemon/APIJSON)  
[github/dengyuhan](https://github.com/dengyuhan)  
[github/zrp2017](https://github.com/zrp2017)  
[github/fly803/BaseProject](https://github.com/fly803/BaseProject)  
[github/razerdp](https://github.com/razerdp)  
[github/SuperChenC/s-mvp](https://github.com/SuperChenC/s-mvp)  
[github/KingJA/LoadSir](https://github.com/KingJA/LoadSir)  
[github/jianshijiuyou](https://github.com/jianshijiuyou)  
[github/zxy198717](https://github.com/zxy198717)  
[github/addappcn](https://github.com/addappcn)  
[github/RainliFu](https://github.com/RainliFu)  
[github/sugarya](https://github.com/sugarya)  
[github/stormzhang](https://github.com/stormzhang)

Обсуждение
----------

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

QQ дискуссионная группа  914275312 (новая) 477963933 (полная) 538979188 (полная)
**Вступление в группу**
Эта группа бесплатна для вступления, и все могут обсуждать использование и возникающие проблемы, связанные с этой библиотекой. Лидер группы также решит проблему в группе. Если проблема не может быть решена членами группы, лидер группы не решит эту проблему. Если проект является срочным, пожалуйста, войдите в платную группу решений (обратите внимание, что в платной группе лидер группы будет очень серьёзно и усердно решать проблемы, но это не гарантирует, что она может быть полностью решена), или переключитесь на использование других библиотек обновления.
<!-- Эта группа предназначена только для обсуждения Android Smart Refresh Layout. Пожалуйста, не обсуждайте контент, кроме Android и обновления вниз. В этой группе позже будет взиматься плата за решение группы, и бесплатная дискуссионная группа будет открыта снова. Те, кто ещё не присоединился к группе, должны поторопиться~ -->
**Напоминание**
Ответ на присоединение к группе можно найти в этом документе.

Другие работы
-------------
[MultiWaveHeader](https://github.com/scwang90/MultiWaveHeader)  
[SmartRefreshHorizontal](https://github.com/scwang90/SmartRefreshHorizontal)  
[Поэзия и Даль](http://android.myapp.com/myapp/detail.htm?apkName=com.poetry.kernel)

Спасибо
--------

[SwipeRefreshLayout](https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html)  
[Ultra-Pull-To-Refresh](https://github.com/liaohuqiu/android-Ultra-Pull-to-Refresh)  
[TwinklingRefreshLayout](https://github.com/lcodecorex/TwinklingRefreshLayout)  
[BeautifulRefreshLayout](https://github.com/android-cjj/BeautifulRefreshLayout)

Лицензия
-------

    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/JackieFu-smartrefreshlayout.git
git@api.gitlife.ru:oschina-mirror/JackieFu-smartrefreshlayout.git
oschina-mirror
JackieFu-smartrefreshlayout
JackieFu-smartrefreshlayout
master