Настройка полей для EditText в AlertDialog

Я создал AlertDialog с EditText в моем приложении для Android,но поля по умолчанию выглядят действительно. Я попытался указать поля следующим образом:

  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);

однако на изображении ниже вы можете видеть, что он не применяет желаемый эффект.

enter image description here

другие параметры, которые я пробовал, включая размещение ввода в LinearLayout и установку полей с помощью LayoutParams перед установкой представления AlertDialog на LinearLayout.

Как установить поля для EditText в AlertDialog?

3 ответов


на самом деле ваше решение работает отлично, за исключением того, что builder.setView(input, margin, 0, margin, 0); принимает аргументы в значениях "pixel". Поэтому значение 20 очень мало. Либо используйте более высокое значение для маржи, например, в 100s. или используйте эту функцию для преобразования из dp в пиксели

public static int dpToPx(int dp)
{
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

и затем

int margin = dpToPx(20);

вы можете 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/


определите свой Edittext в другом файле макета, установив правильные поля в этом макете. Надуйте этот макет, а затем установите его как view for dialog.