以编程方式 AlertDialog 上的复选框不获取中心重力
CheckBox on Programmatically AlertDialog Don't Get Center Gravity
我正在创建一个仅使用代码的 AlertDialog 并为复选框插入一个视图。但是检查具有奇怪的重力行为。
如何将文本+框放在中间或至少将文本放在左侧并开始填充。
谢谢。
private void openFilterDialog() {
final AlertDialog.Builder builder = new AlertDialog.Builder(Objects.requireNonNull(getContext()));
builder.setTitle(getString(R.string.filter));
// Set up the input
final CheckBox hideNoResponseBox = new CheckBox(getContext());
//Put the checkBox on the right side
hideNoResponseBox.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
hideNoResponseBox.setText(R.string.hide_no_responses);
hideNoResponseBox.setChecked(hideNoResponse);
hideNoResponseBox.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
hideNoResponseBox.setGravity(View.TEXT_ALIGNMENT_CENTER);
builder.setView(hideNoResponseBox);
// Set up the buttons
builder.setPositiveButton(getString(R.string.do_filter), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Utils.isDoubleClick()) return;
hideNoResponse = hideNoResponseBox.isChecked();
showLoadingDialog(true);
hideListItem(adapter.getDistanceArrayList());
dialog.dismiss();
}
});
builder.setNegativeButton(getString(R.string.str_cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
继承自View
class的CheckBox的setGravity()
方法,取Gravity
个常量作为值。
https://developer.android.com/reference/android/view/Gravity
编辑:
您可以尝试使用布局参数设置文本引力。 AlertDialog 的 LayoutParams 是 LinearLayout 的 LayoutParams,如下所述:
你只需要使用 LayoutParam 的 setGravity()
方法。
关于填充,您可以尝试将 CheckBox 的父级转换为 ViewGroup 并在那里设置填充,如下所示:
private void openFilterDialog() {
final AlertDialog.Builder builder = new AlertDialog.Builder(Objects.requireNonNull(getContext()));
builder.setTitle(getString(R.string.filter));
// Set up the input
final CheckBox hideNoResponseBox = new CheckBox(getContext());
//Put the checkBox on the right side
hideNoResponseBox.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
hideNoResponseBox.setText(R.string.hide_no_responses);
hideNoResponseBox.setChecked(hideNoResponse);
hideNoResponseBox.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
hideNoResponseBox.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
hideNoResponseBox.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 16, getResources().getDisplayMetrics()));
hideNoResponseBox.setPadding(px,0,0,0);
builder.setView(hideNoResponseBox);
// Set up the buttons
builder.setPositiveButton(getString(R.string.do_filter), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Utils.isDoubleClick()) return;
hideNoResponse = hideNoResponseBox.isChecked();
showLoadingDialog(true);
hideListItem(adapter.getDistanceArrayList());
dialog.dismiss();
}
});
builder.setNegativeButton(getString(R.string.str_cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
我正在创建一个仅使用代码的 AlertDialog 并为复选框插入一个视图。但是检查具有奇怪的重力行为。
如何将文本+框放在中间或至少将文本放在左侧并开始填充。
谢谢。
private void openFilterDialog() {
final AlertDialog.Builder builder = new AlertDialog.Builder(Objects.requireNonNull(getContext()));
builder.setTitle(getString(R.string.filter));
// Set up the input
final CheckBox hideNoResponseBox = new CheckBox(getContext());
//Put the checkBox on the right side
hideNoResponseBox.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
hideNoResponseBox.setText(R.string.hide_no_responses);
hideNoResponseBox.setChecked(hideNoResponse);
hideNoResponseBox.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
hideNoResponseBox.setGravity(View.TEXT_ALIGNMENT_CENTER);
builder.setView(hideNoResponseBox);
// Set up the buttons
builder.setPositiveButton(getString(R.string.do_filter), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Utils.isDoubleClick()) return;
hideNoResponse = hideNoResponseBox.isChecked();
showLoadingDialog(true);
hideListItem(adapter.getDistanceArrayList());
dialog.dismiss();
}
});
builder.setNegativeButton(getString(R.string.str_cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
继承自View
class的CheckBox的setGravity()
方法,取Gravity
个常量作为值。
https://developer.android.com/reference/android/view/Gravity
编辑:
您可以尝试使用布局参数设置文本引力。 AlertDialog 的 LayoutParams 是 LinearLayout 的 LayoutParams,如下所述:
你只需要使用 LayoutParam 的 setGravity()
方法。
关于填充,您可以尝试将 CheckBox 的父级转换为 ViewGroup 并在那里设置填充,如下所示:
private void openFilterDialog() {
final AlertDialog.Builder builder = new AlertDialog.Builder(Objects.requireNonNull(getContext()));
builder.setTitle(getString(R.string.filter));
// Set up the input
final CheckBox hideNoResponseBox = new CheckBox(getContext());
//Put the checkBox on the right side
hideNoResponseBox.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
hideNoResponseBox.setText(R.string.hide_no_responses);
hideNoResponseBox.setChecked(hideNoResponse);
hideNoResponseBox.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
hideNoResponseBox.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
hideNoResponseBox.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 16, getResources().getDisplayMetrics()));
hideNoResponseBox.setPadding(px,0,0,0);
builder.setView(hideNoResponseBox);
// Set up the buttons
builder.setPositiveButton(getString(R.string.do_filter), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Utils.isDoubleClick()) return;
hideNoResponse = hideNoResponseBox.isChecked();
showLoadingDialog(true);
hideListItem(adapter.getDistanceArrayList());
dialog.dismiss();
}
});
builder.setNegativeButton(getString(R.string.str_cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}