改变FragmentDialog弹出框大小

改变FragmentDialog弹出框大小

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

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

改变FragmentDialog弹出框大小_第1张图片

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

改变FragmentDialog弹出框大小_第2张图片

额,貌似好尴尬呀!说好的圆角呢,说好的正方形背景呢。。。明明在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是这么写的:


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

多了这几段代码,运行出来的效果
改变FragmentDialog弹出框大小_第3张图片

改变FragmentDialog弹出框大小_第4张图片

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

弹出框代码

你可能感兴趣的:(改变FragmentDialog弹出框大小)