2010-11-23 32 views
39

Me gustaría crear un EditText que acepte solo números, tenga un máximo de 4 números, y nunca sea más estrecho de lo que sería si se llena con 4 números (no se contrae cuando está vacío, o tiene que expandirse para acomodar 4 números, por lo que es fijo.)En Android, ¿cómo crear EditText de ancho fijo?

Los primeros 2 se logran con: android: inputType = "number" y android: maxLength = "4".

¿Cómo puedo establecer la longitud mínima?

+0

¿except (excluye) o acepta (incluye)? –

Respuesta

34

Un poco hacker, pero usted puede poner su EditText dentro de un FrameLayout junto con otro TextView con text="0000" y visibility=invisible.

FrameLayout En caso de tener width=wrap_content y su EditText tendrá width=match_parent.
Eso debería hacer que sea el ancho correcto siempre.

La ventaja de esto es que es 100% xml, sin código involucrado.

<FrameLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="0000" 
    android:visibility="invisible" /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:maxLength="4" /> 
</FrameLayout> 
+0

Esto realmente funciona mejor que la respuesta de Kcoppock, porque da como resultado una vista de texto del lado derecho exacto. Pero, definitivamente hackish. – ab11

+0

Traté de hacer lo que Jean declaró, pero no pude por el motivo que sea. Terminé usando consejos. – Quv

0

No se conoce la solución incorporada, pero puede intentar verificar pasivamente la longitud y abrir un cuadro de diálogo con un mensaje de error en el momento de la presentación.

0

El problema es que un widget EditText puede perder el foco debido a una gran cantidad de acciones diferentes, como tocar otra vista sensible, botón de menú o (control de cursor de teclado duro) y así sucesivamente. La represión de una longitud o tipo máximo de la entrada se puede realizar durante el proceso de vinculación (acepte el carácter si pasa el filtro o no se excede la longitud). pero el enfoque perdido puede ocurrir todo el tiempo - incluso la presentación no se completó y la entrada a short -> por lo tanto no hay una solución de longitud mínima incorporada, porque la aplicación bloquearía en este punto la ejecución de otro evento o tarea. Al menos debe validar su entrada antes de pasar al siguiente paso en su flujo de trabajo.

93

Una utilizado raramente (que yo sepa) atributo de un EditarTexto que se puede utilizar es:

android:ems="4"

Esto hace que el EditarTexto exactamente 4 ems amplia. Un ancho em es el ancho del carácter más ancho (M) en la fuente seleccionada.

+3

Esto funciona, pero como solo estoy permitiendo la entrada numérica, el ancho de 4 em es mucho más amplio de lo necesario. Puedo jugar para obtener un mejor ancho, pero todavía es un poco impreciso. – ab11

+0

funcionó perfectamente para mí. Solo necesitaba un campo de texto de una longitud fija que podría tener entre 1 y 5 dígitos y se veía bien independientemente de cuántos dígitos ingresara el usuario. – ArtOfWarfare

+1

Quizás es raro, pero lo uso con frecuencia para mis diseños cuando necesito lograr la misma longitud de campo. Si la fuente o el tamaño de la fuente cambian, se adapta, a diferencia de las soluciones que establecen longitudes invariables basadas en píxeles. –

2

Uso androide: width = "XXX.Xdp"

Esto le permite ajustar el ancho en píxeles de densidad que debe ser relativa a la densidad de pantalla. Intenté usar ems para un campo de 2 caracteres de ancho, pero como ems requiere una int, 2 era demasiado pequeño y 3 demasiado grande. Blech.

0

Uso android: layout_width = "60dip", así que estoy de acuerdo con mike fratto.

La solución ems parece ser interesante también.

Phil

8

También puede intentar usar. . .

android:ems="4" 
android:maxEms="4" 
android:layout_width="wrap_content" 

. . .esto debe asegurar el ajuste más apretado posible que permite el estilo EditarTexto Android por defecto

Para un control adicional con el relleno en la izquierda ya la derecha se puede utilizar

android:background="#ffffff" 
android:paddingLeft="0dp" 
android:paddingRight="0dp" 
1

Hay una manera increíblemente fácil de hacer esto mediante programación.

myEditText.setLayoutParams(new LinearLayout.LayoutParams(200, 50)); 

Esto sería establecer el ancho a 200 y la altura a 50 !!

Enjoy :)

+0

Luego, por supuesto, necesitaría ver manualmente el ancho de cuatro caracteres, pero todavía creo que esta es una manera muy sencilla de configurar manualmente el ancho y alto de un EditText. – wea

0

Puede establecer la alineación de otra forma cuando se pone el carácter más ancho que wditText Es aumento de la anchura o anchura EditarTexto. Establezca toLeftOf y toRightOf de la vista anterior para administrar esto. Solo una solución

18

En mi situación, necesitaba que la vista tuviera 6 dígitos de ancho. android: ems hizo que el campo fuera demasiado ancho (ya que el carácter M es más ancho que un dígito).

Terminé usando una pista transparente que dicta el ancho mínimo del campo. El siguiente ejemplo tiene seis dígitos de ancho.

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="000000" 
     android:textColorHint="#00FFFFFF" 
     android:maxLength="6" 
     android:inputType="numberPassword" /> 

Esta solución es independiente de la fuente, espacios entre letras y otras cosas que pueden variar. TextColorHint es un color blanco opaco al 0%, por lo que la sugerencia nunca debe ser visible para el usuario.

+0

Buen truco :) Gracias por la idea. –

+0

Esta es la solución más fácil que funcionó mejor. La solución de Kcoppock no funcionó para mí. –