0

我尝试为警报对话框制作自定义样式,该样式可在 2.2 到 4.2 版本中使用。我发现最好的方法是使用

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));

但是,API 11 提供的它不适用于比该版本更早的版本。你能建议用自定义样式实现警报对话框的轻松方法吗?谢谢。

4

2 回答 2

0

你可以使用 android-support-v4.jar (你可以从这里了解这个库)

将此库添加到您的 libs 文件夹中并将其添加到构建路径

现在,为了创建对话框,

现在 convert 通过FragmentActivity扩展您的活动(它不需要任何东西,它只是 Activity 的子类)

现在你必须在你的活动中创建一个静态,比如:

public static class ReportNameFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.enter_report_name);

        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.enter_report_dialog, null);
        final EditText reportName = (EditText) view
                .findViewById(R.id.report_name);
        builder.setView(view)
                // Add action buttons
                .setPositiveButton(R.string.save,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                //Positive Button task

                            }
                        })
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                ReportNameFragment.this.getDialog()
                                        .cancel();
                            }
                        });
        return builder.create();
    }
}

并通过编写以下代码从您活动中的任何位置调用此对话框:

DialogFragment reportNameFragment = new ReportNameFragment();
            reportNameFragment.show(getSupportFragmentManager(),
                    "reportNameTypePicker");

如果你想了解更多关于对话框的信息,你可以去这里...

于 2013-05-14T12:47:19.403 回答
0

我不知道无痛,但根据我的经验,这是一种有效的方法:

1) 创建自定义视图或布局,并通过 builder.setView(view) 将其设置在您的构建器上。

2) 如果您有 AlertDialog 按钮 - 这些按钮不属于您的自定义视图,它们会触发 DialogInterface.OnClickListener 而不是 View.OnClickListener 的事件。因此,如果您需要为它们设置样式,则必须在创建实际警报时像这样动态地进行:

    alert = builder.create();
    alert.setOnShowListener(new DialogInterface.OnShowListener()
    {
        @Override
        public void onShow(DialogInterface dialog)
        {
            Button btnPositive = alert.getButton(Dialog.BUTTON_POSITIVE);
            // set custom stuff for your positive button

            Button btnNegative = alert.getButton(Dialog.BUTTON_NEGATIVE);
            // set custom stuff for your negative button
        }
    });

这不是最优雅的解决方案,但到目前为止,我还没有发现任何其他适用于最低 API 级别 8 的方法。

于 2013-05-14T12:37:23.867 回答