完全自定义的对话框

原文地址: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;
    }
}

自定义对话框实例:

dialog
dialog2

<?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();
	    }
 });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值