效果图:
实现方法
新建一个Commondialog类继承Dialog,然后自定义一个layout,通过setContentView方法来重新设置对话框的View,以达到自定义的效果。
1.CommonDialog类:
public class CommonDialog extends Dialog {
private Context mContext;
private ClickCallBack mCallBack;
public CommonDialog(Context context, ClickCallBack callBack) {
super(context, R.style.DialogStyle);
mContext = context;
mCallBack = callBack;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
public void init() {
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.common_dialog, null);
setContentView(view);
Window dialogWindow = getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
lp.width = (int) (dm.widthPixels * 0.8); // 把对话框宽度设置为屏幕宽度的0.8
dialogWindow.setAttributes(lp);
// 设置按钮监听
TextView tv_ok = (TextView) view.findViewById(R.id.tv_ok);
tv_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCallBack.onConfirm();
dismiss();
}
});
TextView tv_cancel = (TextView) view.findViewById(R.id.tv_cancel);
tv_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCallBack.onCancel();
dismiss();
}
});
}
// 回调接口,执行具体的处理逻辑
public interface ClickCallBack {
public void onConfirm();
public void onCancel();
}
}
2.自定义的布局:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
android:layout_marginBottom="10dp"
android:background="@drawable/dialog_bg">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:gravity="center_horizontal"
android:padding="10dp"
android:text="提示"
android:textSize="16sp"
android:textColor="#000000"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="是否退出应用?"
android:textSize="16sp"
android:textColor="#000000" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#E3E3E3"
android:layout_marginTop="10dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_ok"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:text="确定"
android:textSize="16sp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:focusable="true"
android:clickable="true"
android:gravity="center"
android:textColor="#358AE4" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#E3E3E3" />
<TextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:text="取消"
android:textSize="16sp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:focusable="true"
android:clickable="true"
android:gravity="center"
android:textColor="#358AE4" />
</LinearLayout>
</LinearLayout>
3.在styles.xml中定义的对话框样式:
<style name="DialogStyle">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
4.对话框圆角化:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 圆角 -->
<corners android:radius="5dp" />
<!-- 填充色-->
<solid android:color="#FFFFFF" />
</shape>
使用方法
CommonDialog dialog = new CommonDialog(MainActivity.this, new CommonDialog.ClickCallBack() {
@Override
public void onConfirm() {
Toast.makeText(MainActivity.this, "点击确定", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(MainActivity.this, "点击取消", Toast.LENGTH_SHORT).show();
}
});
dialog.show();