原文地址:https://blog.youkuaiyun.com/gpf1320253667/article/details/84027359
1、首先我们需要自定义Dialog的style,让他自己本有的东西全部透明,然后在设置我们自己的内容就可以达到完全自定义的效果了。
<!--对话框的样式-->
<style name="NormalDialogStyle">
<!--对话框背景 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!--边框 -->
<item name="android:windowFrame">@null</item>
<!--没有标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 是否浮现在Activity之上 -->
<item name="android:windowIsFloa创建ting">true</item>
<!--背景透明 -->
<item name="android:windowIsTranslucent">false</item>
<!-- 是否有覆盖 -->
<item name="android:windowContentOverlay">@null</item>
<!--进出的显示动画 -->
<item name="android:windowAnimationStyle">@style/normalDialogAnim</item>
<!--背景变暗-->
<item name="android:backgroundDimEnabled">true</item>
</style>
<!--对话框动画-->
<style name="normalDialogAnim" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/normal_dialog_enter</item>
<item name="@android:windowExitAnimation">@anim/normal_dialog_exit</item>
</style>
2、在drawable目录下创建"anim"文件夹,然后创建2个子布局文件。(normal_dialog_enter(进入)和normal_dialog_exit(退出))。
**normal_dialog_enter 进入动画**
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="100%"
android:toYDelta="0"
android:fillAfter="false"
android:duration="300" />
</set>
**normal_dialog_exit 退出动画**
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0"
android:toYDelta="100%"
android:fillAfter="false"
android:duration="300" />
</set>
3、接下来就可以为对话框设置我们自定义的style了
/**
* 自定义对话框
*/
private void customDialog() {
final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle);
View view = View.inflate(this, R.layout.dialog_normal, null);
TextView cancel = (TextView) view.findViewById(R.id.cancel);
TextView confirm = (TextView) view.findViewById(R.id.confirm);
// 设置自定义的布局
dialog.setContentView(view);
//使得点击对话框外部不消失对话框
dialog.setCanceledOnTouchOutside(true);
//设置对话框的大小
view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f));
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f);
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.CENTER;
dialogWindow.setAttributes(lp);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
//将Dialog放置在屏幕中间lp.gravity = Gravity.CENTER;并设置他的宽度为屏幕的75%
lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f);
4、这里使用到了一个工具类用来计算手机屏幕的宽高
public class ScreenSizeUtils {
private static ScreenSizeUtils instance = null;
private int screenWidth, screenHeight;
public static ScreenSizeUtils getInstance(Context mContext) {
if (instance == null) {
synchronized (ScreenSizeUtils.class) {
if (instance == null)
instance = new ScreenSizeUtils(mContext);
}
}
return instance;
}
private ScreenSizeUtils(Context mContext) {
WindowManager manager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;// 获取屏幕分辨率宽度
screenHeight = dm.heightPixels;// 获取屏幕分辨率高度
}
//获取屏幕宽度
public int getScreenWidth() {
return screenWidth;
}
//获取屏幕高度
public int getScreenHeight() {
return screenHeight;
}
}
自定义对话框实例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:background="@color/white"
android:layout_height="320dp">
<RelativeLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="50dp">
<ImageView
android:id="@+id/logo"
android:layout_marginLeft="12dp"
android:layout_centerVertical="true"
android:src="@drawable/logo"
android:layout_width="30dp"
android:layout_height="30dp" />
<TextView
android:id="@+id/title"
android:textSize="17sp"
android:textColor="@color/black1"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@+id/logo"
android:layout_centerVertical="true"
android:text="格微北软比特能"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:textSize="14sp"
android:textColor="@color/black1"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@+id/title"
android:layout_centerVertical="true"
android:text="申请使用"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/information"
android:layout_alignParentRight="true"
android:layout_marginRight="12dp"
android:layout_centerVertical="true"
android:src="@drawable/i"
android:layout_width="23dp"
android:layout_height="23dp" />
</RelativeLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="300dp">
<TextView
android:layout_marginBottom="8dp"
android:text="您的手机号码"
android:textStyle="bold"
android:layout_marginLeft="18dp"
android:textColor="@color/black1"
android:textSize="23sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<View
android:background="#F1F1F1"
android:layout_marginTop="25dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_width="match_parent"
android:layout_height="1dp"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_gravity="center"
android:text="18613914898"
android:textSize="20sp"
android:paddingLeft="18dp"
android:textColor="@color/black1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:layout_gravity="center"
android:hint="微信绑定号码"
android:textSize="14sp"
android:paddingLeft="12dp"
android:background="@null"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<View
android:layout_marginBottom="12dp"
android:background="#F1F1F1"
android:layout_marginTop="4dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_width="match_parent"
android:layout_height="1dp"/>
<RelativeLayout
android:id="@+id/telephone"
android:layout_marginLeft="18dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_marginTop="8dp"
android:layout_marginBottom="12dp"
android:text="使用其他手机号码"
android:textColor="#5D6D8F"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<RelativeLayout
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/cancel"
android:text="拒绝"
android:textSize="16dp"
android:textColor="@color/black1"
android:textStyle="bold"
android:gravity="center"
android:layout_marginLeft="24dp"
android:layout_marginRight="24dp"
android:background="@drawable/btn_cancel"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="45dp" />
<TextView
android:id="@+id/sure"
android:text="允许"
android:textSize="16dp"
android:textColor="@color/white"
android:textStyle="bold"
android:gravity="center"
android:layout_marginLeft="24dp"
android:layout_marginRight="24dp"
android:background="@drawable/btn_sure"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="45dp" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
加载布局
private void showCommentDailog() {
View view = View.inflate(getActivity(), R.layout.wechat_share, null); //引用自定义布局
ImageView information = (ImageView) view.findViewById(R.id.information);
RelativeLayout telephone = (RelativeLayout) view.findViewById(R.id.telephone);
TextView cancel = (TextView) view.findViewById(R.id.cancel);
TextView sure = (TextView) view.findViewById(R.id.sure);
final Dialog dialog = new Dialog(getActivity(), R.style.NormalDialogStyle);
dialog.setContentView(view);
dialog.setCanceledOnTouchOutside(true); //设置dialog弹出后会点击屏幕或物理返回键,dialog不消失。
view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(getActivity()).getScreenHeight() * 0.23f));
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes(); //获得window窗口的属性
lp.width = WindowManager.LayoutParams.MATCH_PARENT; //设置窗口宽度为充满全屏
//lp.width = (int) (ScreenSizeUtils.getInstance(getActivity()).getScreenWidth() * 0.9f); //非全屏
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; //设置窗口高度为包裹内容
lp.gravity = Gravity.BOTTOM; //设置dialog弹出时的动画效果,从屏幕底部向上弹出
dialogWindow.setAttributes(lp);
dialog.show();
information.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view2 = View.inflate(getActivity(), R.layout.shuoming, null);
RelativeLayout back = (RelativeLayout) view2.findViewById(R.id.back);
final Dialog dialog2 = new Dialog(getActivity(), R.style.NormalDialogStyle);
dialog2.setContentView(view2);
dialog2.setCanceledOnTouchOutside(true);
view2.setMinimumHeight((int) (ScreenSizeUtils.getInstance(getActivity()).getScreenHeight() * 0.23f));
Window dialogWindow = dialog2.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT; //全屏
//lp.width = (int) (ScreenSizeUtils.getInstance(getActivity()).getScreenWidth() * 0.9f); //非全屏
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
dialogWindow.setAttributes(lp);
dialog2.show();
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog2.dismiss();
}
});
dialog.show();
}
});