Android原生常用配置总结

第1节 Dialog 对话框

1.1 Dialog布局设置

Dialog 常用Style设置

<style name="dialog" parent="@android:style/Theme.Holo.Dialog">
    <!-- 是否有边框 -->
    <item name="android:windowFrame">@null</item>
    <!--是否在悬浮Activity之上  -->
    <item name="android:windowIsFloating">true</item>
    <!--标题  -->
    <item name="android:windowNoTitle">true</item>
    <!--阴影  -->
    <item name="android:windowIsTranslucent">true</item>
    <!--透明背景-->
    <item name="android:background">@android:color/transparent</item>
    <!--窗口背景透明-->
    <item name="android:windowBackground">@android:color/transparent</item>
    <!--弹窗背景是否变暗-->
    <item name="android:backgroundDimEnabled">false</item>
</style>

补充:

<!-- 是否全屏 -->
<item name="android:windowFullscreen">true</item>

Java代码设置

   @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          //设置属性
        setStyle(DialogFragment.STYLE_NO_FRAME, R.style.dialog);
    }

   @Override
    public void onStart() {
        super.onStart();
        Window window = getDialog().getWindow();
        View decorView = window.getDecorView();
        decorView.measure(0,0);
        window.setGravity(Gravity.BOTTOM);
          //设置动画
        window.setWindowAnimations(R.style.dialog_bottom_to_top_style);
        WindowManager.LayoutParams params = window.getAttributes();
        params.x = 0;
        params.y = -20;
        params.height = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        window.setAttributes(params);
        getDialog().setCanceledOnTouchOutside(true);
    }
  • 重点: window.setDimAmount(0); 去掉dialog外部灰色背景

1.2 动画设置

style

<!--控制dialog进出动画-->
    <style name="dialog_animation" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>
        <!-- 进入时的动画 -->
        <item name="android:windowExitAnimation">@anim/dialog_exit</item>
        <!-- 退出时的动画 -->
    </style>

增加动画

dialog.getWindow().setWindowAnimations(R.style.dialog_animation); // 添加动画

第2节 动画xml属性

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="800"
        android:fromYDelta="115%"
        android:interpolator="@android:interpolator/accelerate_cubic"
        android:toYDelta="100%"></translate>
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

注意: 没有指定,默认是以自己为相对参照物

  • fromYDelta 属性为动画起始时 Y坐标上的位置
  • toYDelta 属性为动画结束时 Y坐标上的位置
  • %和%p: %自己的位置开始, p父层View为参照的
    • android:toXDelta=”100%”,表示自身的100%,也就是从View自己的位置开始。
    • android:toXDelta=”80%p”,表示父层View的80%,是以它父层View为参照的。

2.1 进入/退出 案例

dialog_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set  xmlns:android="http://schemas.android.com/apk/res/android">
    <!--顶部 进入-->
    <!--<translate-->
        <!--android:duration="1000"-->
        <!--android:fromYDelta="-100%p"-->
        <!--android:toYDelta="0%p"-->
        <!--/>-->
    <!--底部 进入-->
    <translate
        android:duration="1000"
        android:fromYDelta="100%p"
        android:toYDelta="0%p"
        />
</set>

dialog_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--顶部 退出-->
    <!--<translate-->
        <!--android:duration="1000"-->
        <!--android:fromYDelta="0%p"-->
        <!--android:toYDelta="-100%p"-->
        <!--/>-->

    <!--底部 退出-->
    <translate
        android:duration="1000"
        android:fromYDelta="0%p"
        android:toYDelta="100%p"
        />
</set>