1、自定义dialog
新建dialog布局,在构造导入即可
2、生命周期
只有在调用show()方法时,才会开始生命周期方法调用,初次show(),会依次onCreate()、onStart()。之后show(),直接走onStart(),不再走onCreate()。
3、全屏显示
在style.xml中定义全屏风格,在Dialog构造中导入即可
<style name="Dialog_Fullscreen">
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
</style>
4、代码示例
public class MyDialog extends Dialog {
private Context mContext;
private ImageView mImageView;
private TextView mTitleTextView, mContentView;
private Button mBackButton;
private IClickListener mListener;
private boolean mSuccess;
private String mTitle;
private String mContent;
public MyDialog(@NonNull Context context) {
super(context, R.style.Dialog_Fullscreen);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog);
initView();
}
private void initView() {
setCancelable(false);
setCanceledOnTouchOutside(false);
this.mTitleView = (RelativeLayout)findViewById(R.id.title);
this.mContentView = (RelativeLayout)findViewById(R.id.content);
this.mImageView = (RelativeLayout)findViewById(R.id.img);
this.mBackButton = (RelativeLayout)findViewById(R.id.btn);
this.mBackButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
dismiss();
if (mListener != null) {
mListener.onClick();
}
}
});
}
@Override
protected void onStart() {
super.onStart();
setTitle();
setContent();
changeStyle();
}
public MyDialog title(String title) {
mTitle = title;
return this;
}
public MyDialog listener(IClickListener listener) {
mListener = listener;
return this;
}
public MyDialog message(String content) {
mContent = content;
return this;
}
public MyDialog success(boolean isSuccess) {
mSuccess = isSuccess;
return this;
}
private void setTitle() {
if (TextUtils.isEmpty(mTitle)) {
return;
}
this.mTitleTextView.setText(mTitle);
}
private void setContent() {
if (mContent == null) {
return;
}
this.mContentView.setText(mContent);
}
private void changeStyle() {
if (!mSuccess) {
this.mTitleTextView.setTextColor(Color.RED);
this.mBackButton.setBackgroundResource(drawable.error);
this.mContentTextView.setTextColor(Color.RED);
this.mImageView.setImageResource(drawable.error);
} else {
this.mTitleTextView.setTextColor(Color.Green);
this.mBackButton.setBackgroundResource(drawable.success);
this.mContentTextView.setTextColor(Color.GREEN);
this.mImageView.setImageResource(drawable.success);
}
}
public interface IClickListener {
void onClick();
}
}