# Android 模态富媒体

<Aside type="note" title="重要提示">
从 SDK 6.7.13 版本开始可用
</Aside>

Android 模态富媒体功能允许开发者在其应用程序内的模态弹出窗口中显示 HTML 内容。此弹出窗口不会阻挡其他 UI 元素，并且可以通过滑动手势轻松关闭。该模态窗口提供多种外观、行为、动画等自定义选项，从而提供高度灵活的用户体验。

## 主要功能

- **非阻塞式 UI**：模态窗口不会阻挡与其他 UI 元素的交互。
- **可自定义的滑动手势**：配置滑动手势以向不同方向关闭模态窗口。
- **灵活定位**：选择模态窗口在屏幕上出现的位置（顶部、中部或底部）。
- **自定义动画**：通过不同的动画类型控制模态窗口的出现和消失方式。
- **通过滑动关闭**：用户可以向任何方向滑动来关闭模态窗口。
- **可调节的动画持续时间**：微调模态动画的速度。
- **状态栏处理**：可选择在状态栏下方或上方显示模态窗口。
- **可调节的窗口宽度**：可选择将模态窗口宽度设置为全屏或包裹内容。

## 用法

### 启用模态富媒体

要启用 **模态富媒体** 功能，您需要在应用程序的 `AndroidManifest.xml` 文件中添加以下元数据条目来进行配置：

```xml
<meta-data
    android:name="com.pushwoosh.rich_media_type"
    android:value="Modal" />
```
## 默认配置
模态窗口的外观和行为可以通过 `RichMediaManager` 设置默认配置来自定义。此配置允许您指定模态窗口的行为方式、出现位置、关闭方式以及使用的动画类型。

## 自定义选项

### 模态视图位置

您可以使用 `setViewPosition()` 设置模态窗口在屏幕上的位置。此参数的可用值为：

- `TOP`
- `CENTER` (默认)
- `BOTTOM`

### 关闭动画类型

使用 `setDismissAnimationType()` 自定义模态窗口的关闭方式。可用选项包括：

- `FADE_OUT` (默认)
- `SLIDE_UP`
- `SLIDE_DOWN`
- `SLIDE_LEFT`
- `SLIDE_RIGHT`
- `NONE`

### 显示动画类型

使用 `setPresentAnimationType()` 定义模态窗口的出现方式。可用选项包括：

- `FADE_IN`
- `SLIDE_UP`
- `SLIDE_RIGHT`
- `DROP_DOWN`
- `SLIDE_LEFT`
- `NONE` (默认)

### 滑动手势配置

可以使用 `setSwipeGesture()` 通过向不同方向的滑动手势来关闭模态窗口。可用的滑动手势包括：

- `UP`
- `LEFT`
- `RIGHT`
- `DOWN`
- `NONE` (默认)

### 动画持续时间

通过设置 `animationDuration()`（以毫秒为单位）来控制动画速度。持续时间指定为一个整数值，表示毫秒数。

### 模态窗口宽度

可以使用 `setWindowWidth()` 设置模态窗口的宽度，它定义了模态窗口是占据屏幕的全宽还是仅足以容纳内容。可能的值为：

- `FULL_SCREEN` (默认)
- `WRAP_CONTENT`

### 状态栏处理

默认情况下，模态窗口不会覆盖状态栏。要允许模态窗口出现在状态栏下方，请将 `setStatusBarCovered()` 属性设置为 `true`。


## 配置示例
以下是一些示例，演示了各种动画，包括滑动手势、滑入出现、淡出关闭、不同的动画持续时间以及变化的屏幕宽度。在下方，您还可以找到用于实现这些效果的配置。

### 滑动手势示例

<video src="/android-push-notifications-android-modal-rich-media-1.webm" title="带有向右滑动手势关闭的 Android 模态窗口" autoplay loop muted playsinline />

```
        RichMediaManager.setDefaultRichMediaConfig(new ModalRichmediaConfig()
                .setStatusBarCovered(false)
                .setSwipeGesture(ModalRichMediaSwipeGesture.RIGHT)
                .setViewPosition(ModalRichMediaViewPosition.CENTER)
                .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_RIGHT)
                .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_FROM_LEFT)
                .setAnimationDuration(800)
                .setWindowWidth(ModalRichMediaWindowWidth.WRAP_CONTENT));
```
### 下拉动画示例

<video src="/android-push-notifications-android-modal-rich-media-2.webm" title="带有下拉动画显示和向上滑动关闭的 Android 模态窗口" autoplay loop muted playsinline />

```
        RichMediaManager.setDefaultRichMediaConfig(new ModalRichmediaConfig()
                .setSwipeGesture(ModalRichMediaSwipeGesture.UP)
                .setViewPosition(ModalRichMediaViewPosition.TOP)
                .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_UP)
                .setPresentAnimationType(ModalRichMediaPresentAnimationType.DROP_DOWN)
                .setAnimationDuration(1000));

```

### 底部富媒体示例

<video src="/android-push-notifications-android-modal-rich-media-3.webm" title="显示在底部的 Android 模态窗口，带有淡出关闭和向上滑动动画" autoplay loop muted playsinline />

```
        RichMediaManager.setDefaultRichMediaConfig(new ModalRichmediaConfig()
                .setSwipeGesture(ModalRichMediaSwipeGesture.DOWN)
                .setViewPosition(ModalRichMediaViewPosition.BOTTOM)
                .setDismissAnimationType(ModalRichMediaDismissAnimationType.FADE_OUT)
                .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP)
                .setAnimationDuration(2000));
```

## 总结
Android 模态富媒体功能提供了一种简单灵活的方式，在您的应用内呈现 HTML 内容，而不会妨碍用户体验。凭借其广泛的自定义选项，包括滑动手势、动画、定位和窗口宽度，您可以为用户创建无缝且引人入胜的互动。