Android中圓角對話方塊的實現(總結)
阿新 • • 發佈:2019-02-15
效果圖如下:
其中最重要的一點就是:要將對話方塊的背景設定為透明的,其他的圓角之類的可以通過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(); }