Android 文档不同于 Android Studio 警告
Android documentation differs from Android Studio warning
我目前正在实现一个 AlertDialog,其中有一个 CheckBox。为了做到这一点,我膨胀了一个包含 CheckBox 的视图,然后我使用 setView(View)
方法将它添加到我的对话框中,但是通过这种方式我得到了巨大的填充。根据我的阅读,该问题的解决方案显然是使用 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 扩展的自定义 class,其中还有一些其他功能,但我认为不需要它们,如果您认为需要,请告诉我,我会提供他们
您正在查看错误的文档 - 即 AlertDialog
。您调用的代码在 AlertDialog.Builder
。它没有任何文档,因为它用 @hide
注释,因此被排除在 SDK 及其文档之外。它还具有 @RestrictTo
和 @Deprecated
注释,如 support library source.
中所示
javadoc 中给出了一些隐藏的基本原理:
This is currently hidden because it seems like people should just be able to put padding around the view.
一般来说,您不应该调用隐藏或受限的方法。寻找其他方式来实现您的目标。
我目前正在实现一个 AlertDialog,其中有一个 CheckBox。为了做到这一点,我膨胀了一个包含 CheckBox 的视图,然后我使用 setView(View)
方法将它添加到我的对话框中,但是通过这种方式我得到了巨大的填充。根据我的阅读,该问题的解决方案显然是使用 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 扩展的自定义 class,其中还有一些其他功能,但我认为不需要它们,如果您认为需要,请告诉我,我会提供他们
您正在查看错误的文档 - 即 AlertDialog
。您调用的代码在 AlertDialog.Builder
。它没有任何文档,因为它用 @hide
注释,因此被排除在 SDK 及其文档之外。它还具有 @RestrictTo
和 @Deprecated
注释,如 support library source.
javadoc 中给出了一些隐藏的基本原理:
This is currently hidden because it seems like people should just be able to put padding around the view.
一般来说,您不应该调用隐藏或受限的方法。寻找其他方式来实现您的目标。