我尝试为警报对话框制作自定义样式,该样式可在 2.2 到 4.2 版本中使用。我发现最好的方法是使用
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));
但是,API 11 提供的它不适用于比该版本更早的版本。你能建议用自定义样式实现警报对话框的轻松方法吗?谢谢。
你可以使用 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");
如果你想了解更多关于对话框的信息,你可以去这里...
我不知道无痛,但根据我的经验,这是一种有效的方法:
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 的方法。