转:Dialog 实现底部弹出菜单

之前就想做这个底部弹出dialog的笔记,发现这篇已经写的很好,就搬过来方便自己看吧。

原文链接:http://www.cnblogs.com/xyc20080413/p/3461955.html

代码部分:

.....

 findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createDialog(TestDialogActivity.this, R.style.custom_dialog);
            }
        });

......


public Dialog createDialog(Context context, int style) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LinearLayout dialogView = (LinearLayout) inflater.inflate(R.layout.play_mode, null);
        final Dialog customDialog = new Dialog(context, style);

        WindowManager.LayoutParams localLayoutParams = customDialog.getWindow().getAttributes();
        localLayoutParams.gravity = Gravity.BOTTOM | Gravity.LEFT;
        localLayoutParams.x = outsideMenuWidth;
        localLayoutParams.y = 0;

        int screenWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();
        dialogView.setMinimumWidth(screenWidth - outsideMenuWidth);
        // dialogView.setMinimumHeight(10);

        customDialog.onWindowAttributesChanged(localLayoutParams);
        customDialog.getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
                        | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        customDialog.setCanceledOnTouchOutside(false);
        customDialog.setCancelable(true);
        customDialog.setCanceledOnTouchOutside(true);
        customDialog.setContentView(dialogView);

        if (context instanceof Activity) {
            Activity activity = (Activity) context;
            if (!activity.isFinishing()) {
                customDialog.show();
            }
        }
        return customDialog;
    }

  

dialog样式:

    

 <style name="custom_dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@style/dialog_animation</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

    <style name="custom_dialog2" parent="custom_dialog">
        <item name="android:windowBackground">@drawable/play_mode_bg</item>
    </style>

    <style name="dialog_animation" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
        <item name="android:windowExitAnimation">@anim/push_bottom_out</item>
    </style>

底部进入动画:push_bottom_in.xml

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

    <translate
        android:duration="200"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

    <alpha
        android:duration="500"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />

</set>

底部退出动画:push_bottom_out.xml

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

    <translate
        android:duration="200"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

    <alpha
        android:duration="500"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />

</set>

猜你喜欢

转载自becherpan.iteye.com/blog/2237267