Activity以Dialog形式出现

1. 正常定义Activity

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 实际显示区域 -->
    <LinearLayout
        android:layout_width="230dp"
        android:layout_height="230dp"
        android:layout_centerInParent="true"
        android:background="@drawable/white_radius"
        android:gravity="center_horizontal"
        android:orientation="vertical">

    </LinearLayout>
</RelativeLayout>

2. 自定义Dialog样式(也可以使用系统自带的)

在style文件中

<style name="MyAppCompatDialogTheme" parent="AppTheme">
    <item name="android:windowIsFloating">false</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowSoftInputMode">stateAlwaysHidden</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:backgroundDimEnabled">true</item>
    <!--  自定义窗口动态样式 -->
    <item name="android:windowAnimationStyle">@style/SmoothWindowAnimTheme</item>
</style>

<style name="SmoothWindowAnimTheme" parent="@android:style/Animation.Dialog">
    <!-- 自定义窗口进入时样式 -->
    <item name="android:windowEnterAnimation">@anim/in_from_left</item>
    <!-- 自定义窗口退出时样式 -->
    <item name="android:windowExitAnimation">@anim/out_to_right</item>
</style>

3. anim中定义动态样式

从左侧0.5s滑入

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:fromXDelta="-100%p"
        android:fromYDelta="0"
        android:toXDelta="0"
        android:toYDelta="0" />
</set>

向右侧在0.1s内淡出

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="100"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="100%p"
        android:toYDelta="0"/>

    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromAlpha="1.0" android:toAlpha="0.0"
        android:fillAfter="true"
        android:duration="100" />
</set>

4. 在AndroidManifest中引用自定义的样式

<activity
    android:name=".ui.dialog.MyDialogActivity"
    android:screenOrientation="portrait"
    android:theme="@style/MyAppCompatDialogTheme" />

对于直接使用系统自带dialog样式的,省略2、3

<activity
    android:name=".ui.dialog.MyDialogActivity"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Dialog" />

窗口的动态进入退出样式同样适用于普通activity

refer Android Activity as a dialog

         Animate a custom Dialog

         Displaying activity with custom animation

相关推荐