Примечание: Из-за работы с клиентами в последнее время, я не успел провести масштабное обслуживание. Приглашаю всех к участию в PR и совместной работе по поддержке.
Основные задачи в работе:
- Улучшение проверки и верификации прав доступа, чтобы обеспечить совместимость с большим количеством платформ и устройств
- Разделение проверки прав доступа, плавающего окна и управления на отдельные компоненты Если вы хотите присоединиться к поддержке, свяжитесь со мной в личной переписке
Поддержка перетаскивания, а также автоматическое прижатие к краям и анимация
Внутренняя автоматическая проверка прав доступа
Возможность указания интерфейсов, на которых нужно отображать плавающее окно
Автоматическое скрытие плавающего окна при отключении приложения
Для устройств, кроме тех, что используют MIUI, от 4.4 до 7.0 проверка прав доступа не требуется
Возможность установки положения и размера в процентах, что позволяет легко адаптировать к различным разрешениям
Возможность использования цепочки вызовов, что делает код более чистым и понятным
Выполните команды компиляции в зависимости от платформы * Windows: gradlew.bat release * Linux/Mac: gradlew release
Рекомендуется использовать shell для компиляции (Linux/mac терминал, для Windows рекомендуется cmder):
sh build.sh
Результаты компиляции будут находиться в директории release в корневом каталоге.
Интеграция зависимостей,
repositories {
maven { url 'https://dl.bintray.com/miqingtang/maven' }
}
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. Объявление разрешений
```**1. Создание плавающего элемента управления**Необязательно, но если вы хотите обеспечить совместимость с большим количеством сценариев использования, рекомендуется объявить разрешение.``` xml
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 )