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

OSCHINA-MIRROR/q5938-FloatWindow-1

Клонировать/Скачать
README.md 9.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 09.06.2025 01:39 fdb96cf

Обновление плавающего окна

Примечание: Из-за работы с клиентами в последнее время, я не успел провести масштабное обслуживание. Приглашаю всех к участию в PR и совместной работе по поддержке.

Основные задачи в работе:

  1. Улучшение проверки и верификации прав доступа, чтобы обеспечить совместимость с большим количеством платформ и устройств
  2. Разделение проверки прав доступа, плавающего окна и управления на отдельные компоненты Если вы хотите присоединиться к поддержке, свяжитесь со мной в личной переписке

Основные характеристики:


  1. Поддержка перетаскивания, а также автоматическое прижатие к краям и анимация

  2. Внутренняя автоматическая проверка прав доступа

  3. Возможность указания интерфейсов, на которых нужно отображать плавающее окно

  4. Автоматическое скрытие плавающего окна при отключении приложения

  5. Для устройств, кроме тех, что используют MIUI, от 4.4 до 7.0 проверка прав доступа не требуется

  6. Возможность установки положения и размера в процентах, что позволяет легко адаптировать к различным разрешениям

  7. Возможность использования цепочки вызовов, что делает код более чистым и понятным

Интеграция инструментов разработки:


1. Компиляция

Выполните команды компиляции в зависимости от платформы * Windows: gradlew.bat release * Linux/Mac: gradlew release

Рекомендуется использовать shell для компиляции (Linux/mac терминал, для Windows рекомендуется cmder): sh build.sh Результаты компиляции будут находиться в директории release в корневом каталоге.

2. Использование

  • Интеграция зависимостей,

    1. Добавление репозитория Maven: (в будущем будет добавлено в общедоступный репозиторий)
    repositories {
        maven { url 'https://dl.bintray.com/miqingtang/maven' }
    }
    1. Добавление зависимости
    dependencies {
        implementation 'org.sdker.floatwindow:floatwindow:1.1.1'
    }
  • Интеграция в Android Studio, достаточно использовать скомпилированный aar-пакет. Путь к aar-пакету: floatwindow/build/outputs/aar/

  • Интеграция в Eclipse сложнее: распакуйте aar, скопируйте classes.jar в проект libs, переименовав его. Также добавьте разрешения и страницу запроса разрешений в манифесте приложения.

<manifest>
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <application>
        <activity
            android:name="com.yhao.floatwindow.FloatActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:launchMode="standard"
            android:windowSoftInputMode="stateHidden|stateAlwaysHidden" />
    </application>
</manifest>

Конкретные методы использования

0. Объявление разрешений

Необязательно, но если вы хотите обеспечить совместимость с большим количеством сценариев использования, рекомендуется объявить разрешение.``` xml

```**1. Создание плавающего элемента управления**
FloatWindow
      .with(getApplicationContext())
      .setView(view)
      .build();

Метод setView позволяет задать подкласс View или XML-разметку.

2. Установка ширины, высоты и позиции отображения

FloatWindow
      .with(getApplicationContext())
      .setView(view)
      .setWidth(100)                   // 100px
      .setHeight(Screen.width, 0.2f)   // 20% ширины экрана
      .setX(100)                       // 100px
      .setY(Screen.height, 0.3f)       // 30% высоты экрана
      .build();

Можно задать конкретные значения или проценты ширины/высоты экрана. По умолчанию ширина и высота задаются как wrap_content. По умолчанию позиция находится в левом верхнем углу экрана, x и y — это смещения.

3. Указание интерфейса для отображения

FloatWindow
      .with(getApplicationContext())
      .setView(view)
      .setFilter(true, A_Activity.class, C_Activity.class)
      .build();

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

.setFilter(false, B_Activity.class)

Этот метод указывает, что плавающее окно будет скрыто в B_Activity, а в остальных интерфейсах отображено.

Примечание: параметры метода setFilter могут распознавать подклассы этого Activity.

То есть, если A_Activity и C_Activity наследуются от BaseActivity, можно задать следующим образом:

.setFilter(true, BaseActivity.class)

4. Отображение на рабочем столе```java FloatWindow .with(getApplicationContext()) .setView(view) .setDesktopShow(true) //по умолчанию false .build();


**5. Делаем плавающее окно перетаскиваемым**

```java
FloatWindow
      .with(getApplicationContext())
      .setView(view)
      .setMoveType(MoveType.slide)         //перетаскиваемое, после отпускания автоматически прижимается к краю
      .build();

Всего доступно 4 типа MoveType:

MoveType.SLIDE : перетаскиваемое, после отпускания автоматически прижимается к краю (по умолчанию)

MoveType.BACK : перетаскиваемое, после отпускания автоматически возвращается на исходное место

MoveType.ACTIVE : перетаскиваемое

MoveType.INACTIVE : не перетаскиваемое

6. Анимация плавающего окна

FloatWindow
      .with(getApplicationContext())
      .setView(view)
      .setMoveType(MoveType.slide)
      .setMoveStyle(500, new AccelerateInterpolator())  //анимация прижатия к краю длится 500 мс, ускоряющий интерполятор
      .build();

Пользовательская анимация применяется только при MoveType.slide или MoveType.back. По умолчанию используется замедляющий интерполятор, а длительность анимации составляет 300 мс.

7. Дальнейшие действия

// Ручное управление
FloatWindow.get().show();
FloatWindow.get().hide();

// Изменение позиции отображения
FloatWindow.get().updateX(100);
FloatWindow.get().updateY(100);

// Уничтожение
FloatWindow.destroy();

Вышеуказанные действия следует выполнять после инициализации плавающего окна.

8. Несколько плавающих окон

FloatWindow
        .with(getApplicationContext())
        .setView(imageView)
        .build();
```FloatWindow
        .with(getApplicationContext())
        .setView(button)
        .setTag("new")
        .build();

FloatWindow.get("new").show();
FloatWindow.get("new").hide();
FloatWindow.destroy("new");

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

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

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

1
https://api.gitlife.ru/oschina-mirror/q5938-FloatWindow-1.git
git@api.gitlife.ru:oschina-mirror/q5938-FloatWindow-1.git
oschina-mirror
q5938-FloatWindow-1
q5938-FloatWindow-1
master