2011-01-26 38 views
291

Estoy trabajando en una pequeña aplicación de lista de cosas pendientes y hasta ahora todo ha funcionado bastante bien. Hay una pequeña peculiaridad que me gustaría descubrir. Cada vez que voy a agregar un nuevo artículo, tengo un cuadro de diálogo con una vista EditText que muestra adentro. Cuando selecciono la vista Editar texto, el teclado aparece para ingresar texto, como debería. En la mayoría de las aplicaciones, el valor predeterminado parece ser que la tecla Mayús se mantiene para la primera letra ... aunque no lo hace para mi vista. Tiene que haber una manera simple de solucionarlo, pero he buscado repetidamente la referencia y no puedo encontrarla. Estoy pensando que tiene que haber un atributo xml para la referencia cargada por el Adaptador, pero no puedo descubrir cuál es.Primera letra mayúscula para EditText

Respuesta

680

Estáticamente (es decir, en su archivo XML de diseño): configure android:inputType="textCapSentences" en su EditText.

Programado: debe incluir InputType.TYPE_CLASS_TEXT en el InputType del EditText, p. Ej.

EditText editor = new EditText(this); 
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 

se puede combinar con el texto y sus variaciones para solicitar la capitalización del primer carácter de cada oración.

- Google Docs

+4

testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); o android: inputType = "textCapSentences" solo funcionará si el teclado de su dispositivo se activa automáticamente. – Lakshmanan

+5

¿Por qué habilitar esto hace que mi 'android: lines =" 7 "' deje de mostrar 7 líneas (ahora vuelve a ser una línea) –

+1

estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); o android: inputType = "textCapSentences" solo funcionará si el teclado de su dispositivo se activa automáticamente. ** ¿Cuál es la alternativa para esto, programmtically? ** – Swift

55

sólo tiene que utilizar android:inputType="textCapWords" en su elemento EditarTexto.

Por ejemplo:

<EditText 
    android:id="@+id/txtName" 
    android:layout_width="0dp" 
    android:layout_height="40dp" 
    android:layout_weight="0.7" 
    android:inputType="textCapWords" 
    android:textColorHint="#aaa" 
    android:hint="Name Surname" 
    android:textSize="12sp" /> 

, consultar el siguiente enlace para referencia: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType

+0

Es una buena práctica marcar el código en el elemento de código en lugar de hacerlo en negrita. –

+12

Esta respuesta realmente no ayuda a la pregunta de OP. Esto capitalizará el primer carácter para cada ** palabra **, no el primer carácter del texto de entrada (que se asume como una oración). Si bien esto probablemente pueda ayudar a los demás, la respuesta correcta es la respuesta aceptada. –

+0

La solución para editar el campo de texto en una sola línea – Shivang

24
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 

o android:inputType="textCapSentences" sólo funcionará si el teclado del dispositivo automático activado Ajuste mayúscula.

+0

La solución que hace editar el campo de texto en una sola línea – Shivang

14

Me encontré con el mismo problema, simplemente compartiendo lo que descubrí. Podría ayudarlo a usted y a otros ...

Pruebe esto en su diseño.agregue la línea siguiente en su EditText.

android:inputType="textCapWords|textCapSentences" 

funciona bien en mi .. esperemos que funcione también en usted ...

0

Pruebe este código, se capitalizará primer carácter de todas las palabras.

- conjunto addTextChangedListener para vista EditarTexto

edt_text.addTextChangedListener (observador);

- Añadir TextWatcher

TextWatcher watcher = new TextWatcher() { 
    int mStart = 0; 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     mStart = start + count; 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     String input = s.toString(); 
     String capitalizedText; 
     if (input.length() < 1) 
      capitalizedText = input; 
     else if (input.length() > 1 && input.contains(" ")) { 
      String fstr = input.substring(0, input.lastIndexOf(" ") + 1); 
      if (fstr.length() == input.length()) { 
       capitalizedText = fstr; 
      } else { 
       String sstr = input.substring(input.lastIndexOf(" ") + 1); 
       sstr = sstr.substring(0, 1).toUpperCase() + sstr.substring(1); 
       capitalizedText = fstr + sstr; 
      } 
     } else 
      capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1); 

     if (!capitalizedText.equals(edt_text.getText().toString())) { 
      edt_text.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

       } 

       @Override 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 

       } 

       @Override 
       public void afterTextChanged(Editable s) { 
        edt_text.setSelection(mStart); 
        edt_text.removeTextChangedListener(this); 
       } 
      }); 
      edt_text.setText(capitalizedText); 
     } 
    } 
}; 
13

Aplicar siguiente línea en su EditarTexto en XML.

android:inputType="textCapSentences|textMultiLine" 

También permitirá el soporte multilínea.

0

Anteriormente solía ser android:capitalize="words", que ahora está en desuso. La alternativa recomendada es usar android:inputType="textCapWords"

Tenga en cuenta que esto solo funcionará si el teclado de su dispositivo activa automáticamente la configuración de capitalización.

Para hacer esto mediante programación, utilice el método siguiente:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

1

Conjunto tipo de entrada en XML, así como en el archivo Java como éste,

En XML,

android: inputType = "textMultiLine | textCapSentences"

También permitirá multilínea y en el archivo Java,

edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 

hacen Mayúsculas automáticas entorno seguro de su teclado se Habilitado.

Cuestiones relacionadas