我当前正在实现一个 AlertDialog ,其中有一个复选框。为了做到这一点,我给一个包含 CheckBox 的视图充气,然后使用setView(View)
方法将其添加到Dialog中,但是通过这种方式,我得到了很大的填充。根据我的阅读,解决该问题的方法显然是使用setView(View, int, int, int, int)
方法(该方法设置所有方向的填充),但是当我尝试实现android studio时会出现错误(可以是通过添加@SuppressLint("RestrictedApi")
来避免,但是我不知道那是什么意思也不意味着什么,所以如果您知道不要犹豫向我解释),然后说不赞成使用此方法,那么奇怪的是,在文档中(正确的here),没有什么可以说不赞成使用此方法的,所以我想知道,在这种情况下,我应该信任文档还是androidStudio? (也是使用第二种方法的一个好主意)
这是 AlertDialog 的代码:
@SuppressLint("RestrictedApi")
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
View checkBoxView = View.inflate(getContext(), R.layout.checkbox, null);
CheckBox checkBox = (CheckBox) checkBoxView.findViewById(R.id.checkbox_dontaskmeagain);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
SharedPrefUtils.setShowAlertDialog(getContext(), b);
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.alert_everyday_dialog_message);
builder.setTitle(R.string.alert_dialog_title)
.setView(checkBoxView, 0, 0, 0, 0) //this apparently is deprecated
.setPositiveButton(R.string.alert_dialog_delete, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mListener.onEverydayDialogPositiveClick(DeleteTaskEverydayDialog.this);
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mListener.onEverydayDialogNegativeClick(DeleteTaskEverydayDialog.this);
}
});
return builder.create();
}
请注意,这是自AlertDialog扩展的自定义类,其中还有一些其他功能,但我认为不需要它们,如果您认为有必要,请告诉我,我会提供它们
答案 0 :(得分:3)
您正在查看错误的文档-即AlertDialog
。您正在调用的代码在AlertDialog.Builder
上。它没有任何文档,因为它带有@hide
注释,因此不包含在SDK及其文档中。如support library source所示,它还具有@RestrictTo
和@Deprecated
注释。
javadoc中提供了一些隐藏的理由:
此内容目前处于隐藏状态,因为似乎人们应该可以在视图周围添加填充。
通常来说,您不应调用隐藏或受限方法。寻找实现目标的其他方法。