改变FragmentDialog弹出框大小

来源:互联网 发布:mysql join 默认值 编辑:程序博客网 时间:2024/06/05 16:36

改变FragmentDialog弹出框大小

版权声明:本文为博主原创文章,未经博主允许不得转载。

一个很常见的支付弹出框,大概效果是这样的:

这里写图片描述

初看之下,这不就是一个普通的弹出框么,于是决定用Android官推的DialogFragment实现这种弹出框,然而,实践是检验真理唯一标准,开撸之后才发现暗藏杀招呀。如果中规中矩的一步步写下去(继承DialogFragment,重写onCreateView方法),则出来的效果:

这里写图片描述

额,貌似好尴尬呀!说好的圆角呢,说好的正方形背景呢。。。明明在xml中设置背景了呀,不管用?!

<com.zhy.autolayout.AutoLinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="center_horizontal"    android:orientation="vertical"    android:background="@drawable/rec_cirwhite"    tools:context=".DialogFragmentInput">    <TextView        android:id="@+id/tv_result_pay"        android:layout_width="match_parent"        android:layout_height="172px"        android:textColor="@color/colorText"        android:textSize="36px"        android:textStyle="bold"        android:gravity="center"        android:text="支付失败"/>    <View        android:layout_width="match_parent"        android:layout_height="1px"        android:background="@color/colorDivider"/>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="170px"        android:gravity="center"        android:padding="20px">        <TextView            android:id="@+id/tv_cancel_pay"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="wrap_content"            android:textStyle="bold"            android:background="@drawable/circlegraybg"            android:textSize="13sp"            android:textColor="@color/colorWhite"            android:gravity="center"            android:paddingTop="5dp"            android:paddingBottom="5dp"            android:text="取消"/>        <View            android:id="@+id/v_pay"            android:layout_width="10dp"            android:layout_height="match_parent"/>        <TextView            android:id="@+id/tv_repay_pay"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="wrap_content"            android:textStyle="bold"            android:background="@drawable/circlegreenbg"            android:textSize="13sp"            android:textColor="@color/colorWhite"            android:gravity="center"            android:paddingTop="5dp"            android:paddingBottom="5dp"            android:text="重新支付"/>        <TextView            android:id="@+id/tv_confirm_pay"            android:layout_width="134px"            android:layout_height="60px"            android:background="@drawable/circlegreenbg"            android:text="确定"            android:textColor="@color/colorWhite"            android:textSize="13sp"            android:gravity="center"/>    </LinearLayout></com.zhy.autolayout.AutoLinearLayout>

关于背景@drawable/rec_cirwhite是这么写的:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">    <corners android:radius="120dp"/>    <solid android:color="@color/colorWhite"/></shape>

这怎么看都不应该是那个样子。。。
很明显是DialogFragment的问题,貌似是系统默认定制过深,于是赶紧找解决办法:

实现圆角:
在onCreateView方法内加上该段代码:

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

改变DialogFragment大小
重写onStart方法:

 @Override    public void onStart() {        super.onStart();        Dialog dialog = getDialog();        if (dialog != null) {            DisplayMetrics dm = new DisplayMetrics();            //设置弹框的占屏宽        getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);            dialog.getWindow().setLayout((int) (dm.widthPixels * 0.5), ViewGroup.LayoutParams.WRAP_CONTENT);        }    }

多了这几段代码,运行出来的效果
这里写图片描述

这里写图片描述

是不是可爱了很多,最后源码奉上:

弹出框代码

原创粉丝点击