DialogFragment 实现圆角效果

前端之家收集整理的这篇文章主要介绍了DialogFragment 实现圆角效果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

以前使用AlertDialog或者Dialog的时候使用一张xml 圆角的drawable文件作为 dialog的背景即可实现圆角效果

但是在使用DialogFragment的时候发现 无论如何设置 drawable 文件中 corners属性的radius值,都没有效果

后来在stackoverflow上面发现了一个解决办法。

首先
1. 在DialogFragment的布局文件设置的时候 留出一些padding空间,
2. 然后在fragment中oncreateView方法加上一句代码。设置window的背景为透明色。

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

具体代码如下

这是布局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="200dp" android:layout_height="wrap_content" android:background="@drawable/exit_app_dialog_bg" android:orientation="vertical">
  3.  
  4. <LinearLayout android:paddingTop="5dp" android:paddingRight="5dp" android:paddingLeft="5dp" android:layout_width="match_parent" android:layout_height="65dp" android:layout_gravity="center" android:background="@drawable/exit_app_dialog_title_bg">
  5.  
  6. <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="确定退出应用?" android:textColor="@color/white" />
  7. </LinearLayout>
  8.  
  9. <View android:layout_width="match_parent" android:layout_height="1px" android:background="@color/gray" />
  10.  
  11. <LinearLayout android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:layout_marginRight="5dp" android:layout_marginLeft="5dp" android:layout_width="match_parent" android:layout_height="45dp" android:orientation="horizontal">
  12.  
  13. <TextView android:id="@+id/btn_cancel" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="取消" android:textColor="@color/themeColor" />
  14.  
  15. <View android:layout_width="1px" android:layout_height="match_parent" android:background="@color/themeColor" />
  16.  
  17. <TextView android:id="@+id/btn_ok" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="#EEEEEE" android:gravity="center" android:text="确定" android:textColor="@color/themeColor" />
  18.  
  19. </LinearLayout>
  20.  
  21. </LinearLayout>

这是dialogfragment中内部实现的代码

  1. @Nullable
  2. @Override
  3. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  4.  
  5. getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
  6. getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
  7. View view = inflater.inflate(R.layout.dialog_exit_application,container,false);
  8.  
  9. btn_ok = (TextView) view.findViewById(R.id.btn_ok);
  10. btn_cancel = (TextView) view.findViewById(R.id.btn_cancel);
  11.  
  12. btn_ok.setOnClickListener(new View.OnClickListener() {
  13. @Override
  14. public void onClick(View v) {
  15. positiveListener.onPositiveClick(v);
  16. getDialog().dismiss();
  17. }
  18. });
  19. btn_cancel.setOnClickListener(new View.OnClickListener() {
  20. @Override
  21. public void onClick(View v) {
  22. negativeListener.onNegativeClick(v);
  23. getDialog().dismiss();
  24. }
  25. });
  26.  
  27. return view;
  28. }

效果

因为如果不设置 padding属性 TextView本身是方角的,会覆盖已经设置好的圆角效果

猜你在找的XML相关文章