Android 实现底部弹出对话框效果

来源:互联网 发布:java解析epub 书签 编辑:程序博客网 时间:2024/06/04 20:03

本文主要是利用Dialog 实现 从屏幕底部弹出对话框的效果 并且有动画效果。

线上效果图:


首先先在style.xml中定义对话框的样式 如下

    <style name="dialog" parent="@android:style/Theme.Dialog">        <item name="android:windowFrame">@null</item><!--边框-->        <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->        <item name="android:windowNoTitle">true</item><!--无标题-->        <item name="android:windowContentOverlay">@null</item>        <item name="android:backgroundDimEnabled">true</item>        <item name="android:windowIsTranslucent">false</item>        <item name="android:windowBackground">@color/transparent</item><!--背景透明-->        <item name="android:background">@color/transparent</item>        <item name="android:backgroundDimAmount">0.5</item>        <item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item><!--动画-->    </style>


动画样式如下

    <style name="ActionSheetDialogAnimation" parent="@android:style/Animation.Dialog">        <item name="android:windowEnterAnimation">@anim/bottom_anim_dialog_in</item>        <item name="android:windowExitAnimation">@anim/bottom_anim_dialog_out</item>    </style>


bottom_anim_dialog_in.xml

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


bottom_anim_dialog_out.xml

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

最后在Dialog的构造方法中 使用此样式 

 super(context, R.style.BottomAnimDialogStyle);


这里实现的对话框样式是仿造iOS经典样式 布局文件如下 bottom_anim_dialog_layout.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@drawable/back_bg"        android:orientation="vertical">        <TextView            android:id="@+id/tv_item1"            android:layout_width="match_parent"            android:layout_height="@dimen/distance_size_50"            android:gravity="center"            android:text="换绑银行卡"            android:textColor="@color/light_black"            android:textSize="@dimen/font_size_16" />        <View            android:layout_width="match_parent"            android:layout_height="@dimen/distance_size_split_line"            android:background="@color/having_line" />        <TextView            android:id="@+id/tv_item2"            android:layout_width="match_parent"            android:layout_height="@dimen/distance_size_50"            android:gravity="center"            android:text="解绑银行卡"            android:textColor="@color/light_red"            android:textSize="@dimen/font_size_16" />    </LinearLayout>    <TextView        android:id="@+id/tv_item3"        android:layout_width="match_parent"        android:layout_height="@dimen/distance_size_50"        android:layout_marginTop="@dimen/distance_size_8"        android:background="@drawable/back_bg"        android:gravity="center"        android:text="取消"        android:textColor="@color/light_black"        android:textSize="@dimen/font_size_16" /></LinearLayout>

整个dialog的文件代码如下

package com.ppdai.installment.view.dialog;import android.app.Dialog;import android.content.Context;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.TextView;import com.ppdai.installment.R;import com.ppdai.installment.utils.DensityUtil;public class BottomAnimDialog extends Dialog {    private final Context mContext;    private final String mItem1Name;    private final String mItem2Name;    private final String mItem3Name;    private BottonAnimDialogListener mListener;    private TextView mTvItem1;    private TextView mTvItem2;    private TextView mTvItem3;    public BottomAnimDialog(Context context, String item1Name, String item2Name, String item3Name) {        super(context, R.style.BottomAnimDialogStyle);        this.mContext = context;        this.mItem1Name = item1Name;        this.mItem2Name = item2Name;        this.mItem3Name = item3Name;        initView();    }    private void initView() {        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);        View view = inflater.inflate(R.layout.bottom_anim_dialog_layout, null);        Window window = this.getWindow();        if (window != null) { //设置dialog的布局样式 让其位于底部             window.setGravity(Gravity.BOTTOM);            WindowManager.LayoutParams lp = window.getAttributes();            lp.y = DensityUtil.dip2px(mContext,10); //设置居于底部的距离            window.setAttributes(lp);        }        mTvItem1 = (TextView) view.findViewById(R.id.tv_item1);        mTvItem2 = (TextView) view.findViewById(R.id.tv_item2);        mTvItem3 = (TextView) view.findViewById(R.id.tv_item3);        mTvItem1.setOnClickListener(new clickListener());        mTvItem2.setOnClickListener(new clickListener());        mTvItem3.setOnClickListener(new clickListener());        setContentView(view);        setData();    }    private void setData() {        mTvItem1.setText(mItem1Name);        mTvItem2.setText(mItem2Name);        mTvItem3.setText(mItem3Name);    }    public void setItem1TextColor(int colorId) {//设置item的字体颜色        if (mTvItem1 != null) {            mTvItem1.setTextColor(colorId);        }    }    public void setItem2TextColor(int colorId) {        if (mTvItem2 != null) {            mTvItem2.setTextColor(colorId);        }    }    public void setItem3TextColor(int colorId) {        if (mTvItem3 != null) {            mTvItem3.setTextColor(colorId);        }    }    public void setClickListener(BottonAnimDialogListener listener) {        this.mListener = listener;    }    public interface BottonAnimDialogListener {        void onItem1Listener();        void onItem2Listener();        void onItem3Listener();    }    private class clickListener implements View.OnClickListener {        @Override        public void onClick(View v) {            switch (v.getId()) {                case R.id.tv_item1:                    if (mListener != null) {                        mListener.onItem1Listener();                    }                    break;                case R.id.tv_item2:                    if (mListener != null) {                        mListener.onItem2Listener();                    }                    break;                case R.id.tv_item3:                    if (mListener != null) {                        mListener.onItem3Listener();                    }                    break;            }        }    }}


最后直接使用:

 BottomAnimDialog dialog = new BottomAnimDialog(BankCardManagerActivity.this, "嘻嘻嘻嘻", "哈哈哈哈", "取消");                dialog.setClickListener(new BottomAnimDialog.BottonAnimDialogListener() {                    @Override                    public void onItem1Listener() {                       // TO_DO                         dialog.dismiss();                    }                    @Override                    public void onItem2Listener() {                         // TO_DO                         dialog.dismiss();                    }                    @Override                    public void onItem3Listener() {                        dialog.dismiss();                    }                }); dialog.show();


就是这么简单 。








1 0