啥也不说先上图。
第一部分 dialog全屏与外部padding透明:
做这种全屏的dialog,还踩了一点小坑,比如全屏后有黑背景,无法padding等问题。在此记录。
- 第一步,准备一个layout/xxxlayout.xml, 包含
一个整体的外部布局(RelativeLayout;Linearlayout;ConstraintLayout等)
给它设置属性:
android:background="@drawable/inset_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- 创建drawable/inset_bg.xml, 用于做上面layout的背景,作用是padding边缘:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@color/white"
android:insetBottom="100dp"
android:insetLeft="20dp"
android:insetRight="40dp"
android:insetTop="60dp"/>
- java代码,就是普通的dailog操作。不过要注意一些全屏的设置:
private Dialog mDialog = null;
private Dialog buildAlert(String title, String fist, String second, final int mode) {
if (mDialog != null) {
mDialog.dismiss();
mDialog = null;
}
View view = getLayoutInflater().inflate(R.layout.dialog_mallcenter_alert, null);
mDialog = new Dialog(this, R.style.MallCenterDialog);
mDialog.getWindow().setGravity(Gravity.TOP);
//这句话才会让背景不黑。
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setCanceledOnTouchOutside(false);
mDialog.setContentView(view);
mDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
TextView titleTv = (TextView)view.findViewById(R.id.titleTextView);
titleTv.setText(title);
Button positiveButton = (Button) view.findViewById(R.id.firstSideBtn);
positiveButton.setText(fist);
positiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mode == 1) {
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
} else if (mode == 2) {
try {
} catch (Exception e) {
e.printStackTrace();
}
}
mDialog.dismiss();
}
});
Button negativeButton = (Button) view.findViewById(R.id.secondSideBtn);
negativeButton.setText(second);
negativeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
}
});
return mDialog;
}
mDialog.show();
第二部分 button样式
- 给Button设置
填充
android:background="@drawable/corner_dialog_btn_bm_selector"
中空
android:background="@drawable/corner_dialog_btn_frame_selector"
- drawable 6个文件:
填充背景的selector:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 按压时 -->
<item android:drawable="@drawable/corner_dialog_btn_bm_bg_p" android:state_pressed="true" />
<!-- 默认时 -->
<item android:drawable="@drawable/corner_dialog_btn_bm_bg" />
</selector>
渐变填充背景色按钮(按压与不按压):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#99FFA54F"
android:endColor="#99FFC0CB"
android:angle="135" />
<corners android:radius="33dp"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#FFA54F"
android:endColor="#FFC0CB"
android:angle="135" />
<corners android:radius="33dp"/>
</shape>
中空按钮3个drawable文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 按压时 -->
<item android:drawable="@drawable/corner_dialog_btn_frame_bg_p" android:state_pressed="true" />
<!-- 默认时 -->
<item android:drawable="@drawable/corner_dialog_btn_frame_bg" />
</selector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--圆角-->
<corners android:radius="33dp"/>
<!--中间颜色-->
<solid android:color="#99eeeeee"/>
<!--边框/颜色-->
<stroke
android:width="2dp"
android:color="#eeeeee"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--圆角-->
<corners android:radius="33dp"/>
<!--中间颜色-->
<solid android:color="@android:color/transparent"/>
<!--边框/颜色-->
<stroke
android:width="2dp"
android:color="#eeeeee"/>
</shape>
如果你的需求不是渐变按钮,背景,可以将startColor和endColor改成一样,或者参考中空按钮改下代码。