在 AlertDialog 中设置 EditText 的边距
Setting Margins for EditText in AlertDialog
我在我的 Android 应用程序中创建了一个带有 EditText 的 AlertDialog,但默认边距看起来真的很差。我尝试按如下方式指定边距:
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(SpinActivity.this);
builder.setTitle("Edit Spin Tags");
builder.setMessage("(separate tags with commas)");
// set input
int margin = 10;
final EditText input = new EditText(SpinActivity.this);
input.setSingleLine();
input.setText(spinTags.toString().replace("[", "").replace("]", ""));
builder.setView(input, margin, 0, margin, 0);
但是,从下图中可以看出,它没有应用预期的效果。
我尝试过的其他选项包括将输入放在 LinearLayout 中,并在将 AlertDialog 视图设置为 LinearLayout 之前使用 LayoutParams 设置边距。
如何在 AlertDialog 中设置 EditText 的边距?
在不同的布局文件中定义您的 Edittext,同时在该布局中设置适当的边距。扩充该布局,然后将其设置为对话框视图。
您可以将 LinearLayout
作为 EditText
的父级。然后为 EditText
.
提供边距
private void createDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Demo");
builder.setMessage("Some demo message");
LinearLayout parentLayout = new LinearLayout(this);
EditText editText = new EditText(this);
editText.setHint("Some text");
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
// call the dimen resource having value in dp: 16dp
int left = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin));
int top = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin));
int right = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin));
int bottom = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin));
// this will set the margins
layoutParams.setMargins(left, top, right, bottom);
editText.setLayoutParams(layoutParams);
parentLayout.addView(editText);
builder.setView(parentLayout);
builder.setPositiveButton("OK", null);
builder.create().show();
}
private int getPixelValue(int dp) {
Resources resources = getResources();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dp, resources.getDisplayMetrics());
}
更多内容可以访问http://www.pcsalt.com/android/set-margins-in-dp-programmatically-android/
实际上您的解决方案运行良好,除了 builder.setView(input, margin, 0, margin, 0);
在 "pixel" 值中采用参数。所以 20 的值非常小。要么使用更高的保证金值,例如在 100 年代。或使用此函数将 dp 转换为像素
public static int dpToPx(int dp)
{
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
然后,
int margin = dpToPx(20);
我在我的 Android 应用程序中创建了一个带有 EditText 的 AlertDialog,但默认边距看起来真的很差。我尝试按如下方式指定边距:
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(SpinActivity.this);
builder.setTitle("Edit Spin Tags");
builder.setMessage("(separate tags with commas)");
// set input
int margin = 10;
final EditText input = new EditText(SpinActivity.this);
input.setSingleLine();
input.setText(spinTags.toString().replace("[", "").replace("]", ""));
builder.setView(input, margin, 0, margin, 0);
但是,从下图中可以看出,它没有应用预期的效果。
我尝试过的其他选项包括将输入放在 LinearLayout 中,并在将 AlertDialog 视图设置为 LinearLayout 之前使用 LayoutParams 设置边距。
如何在 AlertDialog 中设置 EditText 的边距?
在不同的布局文件中定义您的 Edittext,同时在该布局中设置适当的边距。扩充该布局,然后将其设置为对话框视图。
您可以将 LinearLayout
作为 EditText
的父级。然后为 EditText
.
private void createDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Demo");
builder.setMessage("Some demo message");
LinearLayout parentLayout = new LinearLayout(this);
EditText editText = new EditText(this);
editText.setHint("Some text");
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
// call the dimen resource having value in dp: 16dp
int left = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin));
int top = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin));
int right = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin));
int bottom = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin));
// this will set the margins
layoutParams.setMargins(left, top, right, bottom);
editText.setLayoutParams(layoutParams);
parentLayout.addView(editText);
builder.setView(parentLayout);
builder.setPositiveButton("OK", null);
builder.create().show();
}
private int getPixelValue(int dp) {
Resources resources = getResources();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dp, resources.getDisplayMetrics());
}
更多内容可以访问http://www.pcsalt.com/android/set-margins-in-dp-programmatically-android/
实际上您的解决方案运行良好,除了 builder.setView(input, margin, 0, margin, 0);
在 "pixel" 值中采用参数。所以 20 的值非常小。要么使用更高的保证金值,例如在 100 年代。或使用此函数将 dp 转换为像素
public static int dpToPx(int dp)
{
return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
然后,
int margin = dpToPx(20);