Java 具有默认主题的自定义AlertDialog
我正在尝试使用默认主题构建一个自定义的Java 具有默认主题的自定义AlertDialog,java,android,android-alertdialog,android-dialog,Java,Android,Android Alertdialog,Android Dialog,我正在尝试使用默认主题构建一个自定义的AlertDialog,以便在代码中的多个位置使用相同的AlertDialog。我通过扩展AlertDialog并编写自定义业务逻辑来确定对话框中的消息,从而创建了一个类。问题是,当我调用AlertDialog.show()时,我看到一个黑色的覆盖层,没有显示对话框。这是我的密码: public class ClosestShrutiDialog extends AlertDialog { private String mLessonId;
AlertDialog
,以便在代码中的多个位置使用相同的AlertDialog
。我通过扩展AlertDialog
并编写自定义业务逻辑来确定对话框中的消息,从而创建了一个类。问题是,当我调用AlertDialog.show()
时,我看到一个黑色的覆盖层,没有显示对话框。这是我的密码:
public class ClosestShrutiDialog extends AlertDialog {
private String mLessonId;
private Activity mActivity;
private View mParentView;
private OnClickedListener mOnClickListerner;
public ClosestShrutiDialog(@NonNull Activity activity, final String lessonId, final View parentView) {
super(activity);
this.mLessonId = lessonId;
this.mActivity = activity;
this.mParentView = parentView;
}
public void setmOnClickListerner(OnClickedListener mOnClickListerner) {
this.mOnClickListerner = mOnClickListerner;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// My business login to decide the msg related params ....
// showing message to user to select the alternate shruti ...
final String msg = mActivity.getResources().getString(R.string.user_alternate_shruti_msg,
userShrutiLabel,
closestShruti.getLabel());
this.setMessage(msg);
this.setButton(android.support.v7.app.AlertDialog.BUTTON_POSITIVE,
mActivity.getResources().getString(R.string.yes),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if(mOnClickListerner != null) {
mOnClickListerner.proceedWithChange(closestShruti);
}
}
});
this.setButton(android.support.v7.app.AlertDialog.BUTTON_NEGATIVE,
mActivity.getResources().getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
}
public interface OnClickedListener {
void proceedWithChange(final Shruti closestShruti);
}
}
我不知道为什么它无法拾取默认模板并显示它。当我使用
AlerDialog.Builder(Context)
时,没有创建自定义类,我能够正确地看到对话框。有什么建议吗?非常老的问题:-)
自定义警报对话框-
自定义对话框主题-**--java文件代码----**
AlertDialog.Builder=新建AlertDialog.Builder(this,R.style.MyAlertDialogStyle);
builder.setTitle(“AppCompatDialog”);
builder.setMessage(“Lorem ipsum dolor…”);
builder.setPositiveButton(“确定”,null);
builder.setNegativeButton(“取消”,null);
builder.show();
**----您可以将其放入xml文件中
styles.xml-自定义样式----**
#FFC107
#FFFFFF
#4CAF50
**---此外,您还可以添加新样式----**
#FFEB3B
@style/TextAppearance.AppCompat.Title
**---警觉的dialong风格---**
...
...
@样式/MyTitleTextStyle
我找到了解决方案。基本上,我不应该重写AlertDialog
的onCreate()
方法。如果我这样做,那么通常会提供一个用于渲染的布局。相反,无论我在上述代码中的onCreate()
方法中做了什么,我都将它移到了另一个函数中,然后从类的构造中调用它,这对我来说很有用。代码类似于:
public class ClosestShrutiDialog extends AlertDialog {
private String mLessonId;
private Activity mActivity;
private View mParentView;
private OnClickedListener mOnClickListerner;
public ClosestShrutiDialog(@NonNull Activity activity, final String lessonId, final View parentView) {
super(activity);
this.mLessonId = lessonId;
this.mActivity = activity;
this.mParentView = parentView;
setupView();
}
public void setmOnClickListerner(OnClickedListener mOnClickListerner) {
this.mOnClickListerner = mOnClickListerner;
}
private void setupView() {
// My business login to decide the msg related params ....
// showing message to user to select the alternate shruti ...
final String msg = mActivity.getResources().getString(R.string.user_alternate_shruti_msg,
userShrutiLabel,
closestShruti.getLabel());
this.setMessage(msg);
this.setButton(android.support.v7.app.AlertDialog.BUTTON_POSITIVE,
mActivity.getResources().getString(R.string.yes),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if(mOnClickListerner != null) {
mOnClickListerner.proceedWithChange(closestShruti);
}
}
});
this.setButton(android.support.v7.app.AlertDialog.BUTTON_NEGATIVE,
mActivity.getResources().getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
}
public interface OnClickedListener {
void proceedWithChange(final Shruti closestShruti);
}
}
我已经浏览了你之前发布的所有链接。我面临的问题是,我想显示AlertDialog的默认对话框弹出窗口,但我不想自定义它。
public class ClosestShrutiDialog extends AlertDialog {
private String mLessonId;
private Activity mActivity;
private View mParentView;
private OnClickedListener mOnClickListerner;
public ClosestShrutiDialog(@NonNull Activity activity, final String lessonId, final View parentView) {
super(activity);
this.mLessonId = lessonId;
this.mActivity = activity;
this.mParentView = parentView;
setupView();
}
public void setmOnClickListerner(OnClickedListener mOnClickListerner) {
this.mOnClickListerner = mOnClickListerner;
}
private void setupView() {
// My business login to decide the msg related params ....
// showing message to user to select the alternate shruti ...
final String msg = mActivity.getResources().getString(R.string.user_alternate_shruti_msg,
userShrutiLabel,
closestShruti.getLabel());
this.setMessage(msg);
this.setButton(android.support.v7.app.AlertDialog.BUTTON_POSITIVE,
mActivity.getResources().getString(R.string.yes),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if(mOnClickListerner != null) {
mOnClickListerner.proceedWithChange(closestShruti);
}
}
});
this.setButton(android.support.v7.app.AlertDialog.BUTTON_NEGATIVE,
mActivity.getResources().getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
}
public interface OnClickedListener {
void proceedWithChange(final Shruti closestShruti);
}
}