实际项目开发中默认的Dialog样式无法满足需求,需要自定义Dialog及其布局,并响应布局中控件的事件。
上效果图:
自定义Dialog,LogoutDialog:
要将自定义布局传入构造函数中,才能在Activity中通过 dialog.findviewbyid 获取到控件,否则返回null。
public class LogoutDialog extends Dialog{ Context context; public LogoutDialog(Context context) { super(context); this.context=context; this.setContentView(R.layout.logout_dialog); } public LogoutDialog(Context context, int theme){ super(context, theme); this.context = context; this.setContentView(R.layout.logout_dialog); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //this.setContentView(R.layout.logout_dialog); }}
自定义布局文件,logout_dialog.xml:
两个Shape的布局,dialog_buttom_bg.xml:
dialog_top_bg.xml:
自定义样式Style,来改变默认的Dialog样式。在values/styles.xml下新加样式:
在Activity中调用:
Dialog dialog==new LogoutDialog(TempActivity.this, R.style.UpdateErrorFinishDialog);dialog.setCanceledOnTouchOutside(false);dialog.show();TextView submit_btn_dialog=(TextView) dialog.findViewById(R.id.submit_btn_dialog);TextView back_btn_dialog=(TextView) dialog.findViewById(R.id.back_btn_dialog);submit_btn_dialog.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Toaster.showLongToast("确定"); dialog.dismiss(); }});back_btn_dialog.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Toaster.showLongToast("返回"); dialog.dismiss(); }});