原生弹窗 MaterialDialog
屁话不多直接上代码,看效果:
private void showUpdateThemeDialog() {
String[] themes ={"天真浪漫","青青草原", "酷炫黑暗", "热情似火", "蓝天白云", "紫情满满", "活力鲜橙", "棕色安然"};
new MaterialDialog.Builder(mContext)
.title("选择主题")
.titleGravity(GravityEnum.CENTER)
.items(themes)
// .titleColorRes(R.color.material_red_500) //标题颜色
.contentColor(Color.BLACK) //注意文字颜色没有“res”后缀
.linkColorAttr(R.attr.aboutPageHeaderTextColor) // 注意,attr用于属性解析,而不是none或res
.dividerColorRes(R.color.colorMainDateBg)
// .backgroundColorRes(R.drawable.dialog_backgroud)//背景色
// .positiveColorRes(R.color.material_red_500)
.neutralColorRes(R.color.colorControlNormal)
// .widgetColorRes(R.color.colorControlNormal)//选中颜色
.negativeText("取消")
// .customView(R.layout.activity_dialog,true)
.itemsCallbackSingleChoice(0,(dialog, itemView, position, text) -> {
ThemeManager.getInstance().setTheme(mActivity, themes[position]);
dialog.dismiss();
return false;
}).show();
}
这个弹窗列表信息的展示,如图:
如果需求跟这个差不多,可以选则这种dialog
还是原生弹窗 AlertDialog
这种弹窗是最常见的,因为很多界面在不要求美观的情况下,都会选择这种弹窗,这种弹窗有标题、正文、确认、取消这种按钮
不多说,上代码和效果图——
//弹出框
private void showDialog() {
AlertDialog dialog = new AlertDialog.Builder(this)
.setMessage("您输入的原密码错误,请点击确认重新输入,如忘记密码,请点击忘记密码按钮进行修改")
.setPositiveButton("确定", null)
.setNeutralButton("忘记密码",null)
.create();
dialog.show();
Button button1=dialog.getButton(AlertDialog.BUTTON_NEGATIVE);
button1.setTextColor(ContextCompat.getColor(this, R.color.dialog_button1));
Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
LinearLayout.LayoutParams cancelBtnPara = (LinearLayout.LayoutParams) button.getLayoutParams();
//设置按钮的大小
cancelBtnPara.height = LinearLayout.LayoutParams.WRAP_CONTENT;
cancelBtnPara.width = LinearLayout.LayoutParams.MATCH_PARENT;
//设置文字居中
cancelBtnPara.gravity = Gravity.CENTER;
//设置按钮左上右下的距离
cancelBtnPara.setMargins(125, 10, 125, 10);
button.setLayoutParams(cancelBtnPara);
button.setBackground(ContextCompat.getDrawable(this, R.color.white));
button.setTextColor(ContextCompat.getColor(this, R.color.dialog_button));
button.setTextSize(16);
}
效果图如下:
这种弹出是最常见的,相信很多人都会用到。
最后就是自定义Dialog
这类是正常项目开发中都需要使用的,因为一般原生的弹窗在美观上就不被美工和客户接收,这就需要自定义布局来展示弹窗内容
上代码:
我简单的封了下
**
* 自定义弹出对话框
*/
public class ButtomDialogView extends Dialog {
private Context context;
private OnDialogClickListener onDialogClickListener;
public ButtomDialogView(Context context) {
super(context, R.style.dialog);
this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = getLayoutInflater().inflate(R.layout.module_layout_dialog_image, null);
TextView linear1 = (TextView) view.findViewById(R.id.tv_iknow);
linear1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onDialogClickListener != null) {
onDialogClickListener.onclick1();
}
});
setContentView(view);//这行一定要写在前面
setCancelable(true);//点击外部不可dismiss
setCanceledOnTouchOutside(true);
Window window = this.getWindow();
window.setGravity(Gravity.CENTER);
WindowManager.LayoutParams params = window.getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(params);
}
public void setOnDialogClickListener(OnDialogClickListener onDialogClickListener) {
this.onDialogClickListener = onDialogClickListener;
}
public interface OnDialogClickListener{
void onclick1();
}
}
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:gravity="center_horizontal"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="157dp"
android:orientation="vertical"
android:background="@drawable/dialog_backgroud"
android:gravity="center_horizontal"
android:layout_marginTop="120dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="已签到"
android:layout_marginTop="43dp"
android:textColor="@color/font_black_deep"
android:textSize="17dp"
android:textStyle="bold"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="12dp"
android:text="今日已签到,请明天再接再厉!"
android:textColor="#7B7B7B"
android:textSize="13dp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="12dp"
android:background="#eee"
android:layout_marginLeft="13dp"
android:layout_marginRight="13dp"></View>
<TextView
android:id="@+id/tv_iknow"
android:layout_width="100dp"
android:layout_height="45dp"
android:gravity="center"
android:text="我知道了"
android:textColor="#4E59F7"
android:textSize="17dp"
android:textStyle="bold"/>
</LinearLayout>
<ImageView
android:id="@+id/iv_sign_in"
android:layout_width="230dp"
android:layout_height="150dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="25dp"
android:background="@mipmap/icon_sign_in" />
</RelativeLayout>
最后就是在Activity或者fragment中用就行了,调用这个方法
private void toChooseIcon() {
if (dialogView == null) {
dialogView = new ButtomDialogView(getActivity());
dialogView.setOnDialogClickListener(new ButtomDialogView.OnDialogClickListener() {
@Override
public void onclick1() {
//这里可以写你需要的操作就行了
dialogView.dismiss();//关闭弹窗
}
dialogView.show();
}
上一波效果图吧
还有其他的弹窗效果可以自己在布局里面设置就行!
希望我的博客能帮到你!!! 谢谢采纳!!