Android中圆角对话框的实现(总结)
效果图如下:
其中最重要的一点就是:要将对话框的背景设置为透明的,其他的圆角之类的可以通过Shape等修改。
1、需要把对话框的默认背景改为透明。
方法:自定义Dialog的样式。
<!--对话框透明背景-->
<style name="Translucent_NoTitle" parent="android:style/Theme.Dialog">
<!--边框-->
<item name="android:windowFrame">@null</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--半透明-->
<item name="android:windowIsTranslucent">false</item>
<!--无标题-->
<item name="android:windowNoTitle">true</item>
<!--提示框背景(透明)-->
<item name="android:windowBackground">@color/transparent</item>
<!--模糊-->
<item name="android:backgroundDimEnabled">true</item>
</style>
<color name="transparent">#00000000</color>
如何使用:
final Dialog dialog = new Dialog(mContext, R.style.Translucent_NoTitle);
2、布局文件XML
2.1 layout_cornerdialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="提示内容" android:textSize="14dp" android:gravity="center_horizontal" android:background="@drawable/bg_corner_top" android:padding="10dp" android:textStyle="bold"/> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/colorLightGray"/> <TextView android:layout_width="match_parent" android:layout_height="100dp" android:text="你确定要退出当前系统吗?" android:padding="10dp" android:background="@color/colorWhite" android:textSize="14dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/Layout_CornerDialog_btnCancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/btn_corner_leftbottom" android:textSize="14dp" android:text="取消"/> <Button android:id="@+id/Layout_CornerDialog_btnBesure" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/btn_corner_rightbottom" android:textSize="14dp" android:text="确定"/> </LinearLayout> </LinearLayout>
2.2、layout_cornerdialog_withclose.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:layout_marginRight="30dp" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="提示内容" android:textSize="14dp" android:gravity="center_horizontal" android:background="@drawable/bg_corner_top" android:padding="10dp" android:textStyle="bold"/> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/colorLightGray"/> <TextView android:layout_width="match_parent" android:layout_height="100dp" android:text="你确定要退出当前系统吗?" android:padding="10dp" android:background="@color/colorWhite" android:textSize="14dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/Layout_CornerDialog_btnCancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/btn_corner_leftbottom" android:textSize="14dp" android:text="取消"/> <Button android:id="@+id/Layout_CornerDialog_btnBesure" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/btn_corner_rightbottom" android:textSize="14dp" android:text="确定"/> </LinearLayout> </LinearLayout> <ImageView android:id="@+id/Layout_CornerDialog_ivCancel" android:layout_width="35dp" android:layout_height="35dp" android:scaleType="fitXY" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:src="@mipmap/icon_close"/> </RelativeLayout>
2.3、btn_corner_leftbottom.xml,其他相关的样式文件类似
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/colorWhite"/> <stroke android:color="@color/colorLightGray" android:width="1dp"/> <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="0dp" android:topRightRadius="0dp" android:topLeftRadius="0dp"/> </shape>
3、如何在Activity中引用
/** * 显示圆角对话框 */ private void showCornerDialog() { final Dialog dialog = new Dialog(mContext, R.style.Translucent_NoTitle); View view = LayoutInflater.from(mContext).inflate(R.layout.layout_cornerdialog, null); Button btnCancel = view.findViewById(R.id.Layout_CornerDialog_btnCancel); Button btnBesure = view.findViewById(R.id.Layout_CornerDialog_btnBesure); btnCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "取消", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); btnBesure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "确定", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); dialog.setContentView(view); dialog.show(); } /** * 显示圆角对话框(带有悬浮关闭按钮) */ private void showCornerDialogWithClose() { final Dialog dialog = new Dialog(mContext, R.style.Translucent_NoTitle); View view = LayoutInflater.from(mContext).inflate(R.layout.layout_cornerdialog_withclose, null); Button btnCancel = view.findViewById(R.id.Layout_CornerDialog_btnCancel); Button btnBesure = view.findViewById(R.id.Layout_CornerDialog_btnBesure); ImageView ivClose = view.findViewById(R.id.Layout_CornerDialog_ivCancel); ivClose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); btnCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "取消", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); btnBesure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "确定", Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); dialog.setContentView(view); dialog.show(); }