2011-02-07 22 views
11

Parece que EditText en la imagen de abajo es demasiado ancho. Supongo que he usado mal el SDK de alguna manera y hasta que esté convencido de lo contrario, no estoy buscando una forma de especificar cierto número de píxeles de margen/relleno en los lados del EditText.Android EditText en AlertDialog parece demasiado amplio

enter image description here

Éste parece más apropiado.

enter image description here

Aquí está mi código (que crea la primera, de diálogo 'Crear etiqueta',):

final Dao<Tag, Integer> tagDao = getHelper().getTagDao(); 

final EditText input = new EditText(this); 
input.setSingleLine(true); 
input.setHint(R.string.create_tag_dialog_hint); 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setView(input); 
builder.setTitle(getString(R.string.create_tag_dialog_title)); 
builder.setPositiveButton(
    getString(R.string.create_tag_dialog_positive), 
    new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      String value = input.getText().toString().trim(); 
      Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show(); 
      Tag tag = new Tag(value); 
      try { 
        tagDao.create(tag); 
      } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
     } 
    }); 
builder.setNegativeButton(
    getString(R.string.create_tag_dialog_negative), null); 
builder.show(); 

siento por la duración del post y gracias por los comentarios útiles.

Respuesta

0

Intente configurar algunos rellenos en su EditText utilizando el método setPadding. Esto debería agregar un espacio entre el borde de EditText y el borde del diálogo. N

+1

El relleno se aplica a las cosas dentro de la vista, por lo que 'EditText.setPadding()' crea espacio alrededor del texto dentro de 'EditText'. Intenté '((Ver) input.getParent()). SetPadding (10, 10, 10, 10)' después de 'builder.setView (input)', pero esto dio como resultado una excepción de puntero nulo. De todos modos, no quiero encontrar una forma de personalizarlo para mi preferencia personal de 5px o similar, quiero permitir que el SDK lo formatee correctamente. Supongo que estoy usando el SDK incorrectamente y, por lo tanto, el formato no se ve bien. – altendky

13

Usted puede hacerlo de esta manera:

LinearLayout layout = new LinearLayout(this); 
layout.setOrientation(LinearLayout.VERTICAL); 
layout.setGravity(Gravity.CENTER_HORIZONTAL); 
final EditText input = new EditText(this); 
input.setSingleLine(true); 
layout.setPadding(10, 0, 10, 0); 
input.setHint("Hint"); 
layout.addView(input); 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setView(layout); 

Por otra parte, setSingleLine está en desuso. Debe usar InputStyle.

+1

Gracias por el aviso de desaprobación de SingleLine. No lo mencionan en todas partes en la documentación. Aún así, no parece que deba elegir una cantidad de píxeles para corregir esto. Supongo que el resultado actual es incorrecto debido a mi uso incorrecto de 'AlertDialog.Builder' (o tal vez sea una técnica completamente incorrecta). – altendky

1

Establezca el margen de margen de disposición y margen de margen de diseño en 5sp. El margen establece el espacio alrededor del grupo de vista. Eche un vistazo a ViewGroup.MarginLayoutParams

+0

No estoy muy seguro de cómo aplicar eso ... pero a pesar de que sp no sea px, aún así sería yo arbitrariamente estableciendo algunos espacios en lugar de dejar que android use un espaciado predeterminado. No quiero ajustar el diseño a mi preferencia personal, quiero que Android lo haga según sus preferencias. – altendky

30

Solo lo ordené yo mismo. Con una instancia de AlertDialog, puede especificar setView y pasar parámetros de espaciado. Esto funcionará

final EditText input = new EditText(this); 

AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
alertDialog.setTitle("Title"); 
alertDialog.setMessage("Message"); 
alertDialog.setView(input, 10, 0, 10, 0); // 10 spacing, left and right 
alertDialog.setButton("OK", new OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // Clicked 
    } 
}); 
alertDialog.show(); 

Editar: Estoy conciente de que esta pregunta es antigua, pero no se proporcionó ninguna solución.

+13

Heads Up: 'alertDialog.setView (View, int, int, int, int);' no existe en las nuevas versiones de la api de Android. –

+0

@DavidPassmore ¿tiene algún sustitutivo potencial para este método? – Rob

+1

@DavidPassmore no, existe. Al menos si está utilizando el appcompat v7 AlertDialog – mobilepotato7