2016-07-25 2 views
7

Я создал AlertDialog с EditText в своем приложении для 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); 

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

enter image description here

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

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

+0

попробовать решение от этого ответа http://stackoverflow.com/questions/20761611/how-to-set- edittext-topmargins-in-dp-programatically – wanpanman

+0

@wanpanman просто попробовал это, и это не повлияло, к сожалению – scientiffic

ответ

6

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

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

, а затем,

int margin = dpToPx(20); 
+0

безупречный !! спасибо за решение этой загадки для меня. – scientiffic

0

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

2

У вас может быть 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/

+0

Спасибо за предложение, но это не имеет никакого эффекта – scientiffic

+0

Это работает для меня. Спасибо. – ACAkgul

Смежные вопросы