我目前动态设置AlertDialog
的标题部分。但是,我只能在显示对话框后执行此操作。我想将所有对话框移到他们自己的班级,并将DialogFragment
扩展为Google shows here。
所以目前在创建AlertDialog
之后我会做这样的事情:
AlertDialog dialog = builder.create();
dialog.show();
colorAlertDialogTitle(dialog);
public static void colorAlertDialogTitle(AlertDialog dialog, ThemeColors colors) {
int color = myColor;
int background = myBackgroundColor;
int dividerId = dialog.getContext().getResources().getIdentifier("titleDivider", "id", "android");
ImageView divider = (ImageView) dialog.findViewById(dividerId);
if (divider != null) {
divider.setBackgroundColor(color);
}
所以现在,当我将代码移动到扩展DialogFragment的类时,我尝试在显示对话框之前设置该类中的对话框样式,应用程序崩溃时出现此错误:
android.util.AndroidRuntimeException: requestFeature() must be called before adding content
at com.android.internal.policy.PhoneWindow.requestFeature(PhoneWindow.java:317)
at com.android.internal.app.AlertController.installContent(AlertController.java:231)
at android.app.AlertDialog.onCreate(AlertDialog.java:423)
at android.app.Dialog.dispatchOnCreate(Dialog.java:394)
at android.app.Dialog.show(Dialog.java:295)
at android.app.DialogFragment.onStart(DialogFragment.java:499)
at android.app.Fragment.performStart(Fragment.java:2244)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1002)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
at android.app.BackStackRecord.run(BackStackRecord.java:793)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:482)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
所以我不知道如何使用正确的方法来创建对话框,并且仍然可以动态地设置它们。
将其移至DialogFragment
后,我就是这样做的:
public class ProspectDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View mView = inflater.inflate(R.layout.myLayout, null);
builder.setView(mView);
builder.setTitle(R.string.title);
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
colorAlertDialogTitle(dialog);
return dialog;
}
}
答案 0 :(得分:1)
显示files
Qyz.jpg,Qxz.jpg
后,您只能访问UI元素(分隔线)。创造是不够的。
您可以在AlertDialog
Fragment
您在private AlertDialog mDialog;
中设置的
onCreateDialog()
然后您可以使用这样的换色方法:
mDialog = builder.create();
(其中myDialogFragment.show(getSupportFragmentManager(), "coloredDialog");
myDialogFragment.colorAlertDialogTitle(myDialogFragment.getDialog());
是通常的getter方法)
答案 1 :(得分:1)
请查看"如果您想要自定义AlertDialog一节。例如,添加一些带有自定义背景颜色的复选框,请使用以下方法:"这篇文章https://stackoverflow.com/a/33439849/5475941。在这篇文章中,我展示了如何动态更改AlertDialog的样式。我希望它有所帮助。