实现效果如图
1.dialog_pick_avatar.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:gravity="bottom"
android:orientation="vertical">
<TextView
android:id="@+id/big_image"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="#ffffff"
android:gravity="center"
android:text="@string/dialog_big_image"
android:textColor="#FF171819"
android:textSize="15dp" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#FFEEEEEE" />
<TextView
android:id="@+id/select_picture"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="#ffffff"
android:gravity="center"
android:text="@string/photo_mall"
android:textColor="#FF171819"
android:textSize="15dp" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#FFEEEEEE" />
<TextView
android:id="@+id/select_camera"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="#ffffff"
android:gravity="center"
android:text="@string/take_photo"
android:textColor="#FF171819"
android:textSize="15dp" />
<TextView
android:id="@+id/select_dismiss"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_marginTop="12dp"
android:background="#ffffff"
android:gravity="center"
android:text="@string/dialog_cancel"
android:textColor="#FF171819"
android:textSize="15dp" />
</LinearLayout>
2.style样式
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowCloseOnTouchOutside">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.7</item>
</style>
<style name="dialogWindowAnim" parent="android:Animation" mce_bogus="1">
<item name="android:windowEnterAnimation">@anim/push_buttom_in</item>
<item name="android:windowExitAnimation">@anim/push_up_out</item>
</style>
3.弹出、消失动画
push_buttom_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="100%p" android:toYDelta="0"
android:duration="300"
android:interpolator="@android:anim/accelerate_decelerate_interpolator" />
</set>
push_up_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="300"/>
</set>
4.封装MyDialog
public class MyDialog {
public final static int PICK_AVATAR = 1;
public Dialog mDialog;
public TextView dialog_message;
public TextView dialog_title;
public TextView positive;
public TextView negative;
public TextView mBigImage;
public TextView mSelectCamera;
public TextView mSelectPicture;
public TextView mCancel;
public View mView;
public MyDialog(Context context,int type) {
if(PICK_AVATAR==type) {
LayoutInflater inflater = LayoutInflater.from(context);
mView = inflater.inflate(R.layout.dialog_pick_avatar, null);
mDialog = new Dialog(context, R.style.dialog);
mDialog.setContentView(mView);
Window dialogWindow = mDialog.getWindow();
dialogWindow.setGravity(Gravity.BOTTOM);
dialogWindow.setWindowAnimations(R.style.dialogWindowAnim); // 添加动画
WindowManager.LayoutParams lp = dialogWindow.getAttributes(); // 获取对话框当前的参数值
lp.width = context.getResources().getDisplayMetrics().widthPixels; // 宽度
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; // 高度
dialogWindow.setAttributes(lp);
mDialog.setCanceledOnTouchOutside(true);
mCancel = mView.findViewById(R.id.select_dismiss);
mSelectCamera = mView.findViewById(R.id.select_camera);
mSelectPicture = mView.findViewById(R.id.select_picture);
mBigImage = mView.findViewById(R.id.big_image);
mCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
}
public void show() {
mDialog.show();
}
public void dismiss() {
mDialog.dismiss();
}
}
5.使用说明书
MyDialog myDialog =new MyDialog(this,MyDialog.PICK_AVATAR);
myDialog.show();
这样写的好处就是,定义不同的标记可以创建不同样式dialog,一个MyDialog就可以实现很多样式。