Primera letra mayúscula para EditText


383

Estoy trabajando en una pequeña aplicación de lista de tareas personal y hasta ahora todo ha funcionado bastante bien. Hay una pequeña peculiaridad que me gustaría resolver. Cada vez que voy a agregar un nuevo elemento, tengo un cuadro de diálogo con una vista EditText que se muestra dentro. Cuando selecciono la vista EditText, 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, en mi opinión, no lo hace. Tiene que haber una manera simple de arreglarlo, pero he buscado la referencia repetidamente y no puedo encontrarla. Estoy pensando que tiene que haber un atributo xml para la referencia cargada por el Adaptador, pero no puedo averiguar qué es.

Respuestas:


805

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

Programáticamente: debe incluir InputType.TYPE_CLASS_TEXTen el InputTypede EditText, por ejemplo

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

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

- Documentos de Google


55
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); o android: inputType = "textCapSentences" solo funcionará si la configuración de capitalización automática del teclado de su dispositivo está habilitada.
Lakshmanan

8
¿Por qué habilitar esto hace android:lines="7"que ya no muestre 7 líneas (ahora vuelve a 1 línea por defecto)
James Wierzba

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); o android: inputType = "textCapSentences" solo funcionará si la configuración de capitalización automática del teclado de su dispositivo está habilitada. ¿Cuál es la alternativa para esto, programáticamente?
Swift

@JamesWierzba Me referiré aquí a la respuesta de Shivang como respuesta para el soporte de varias líneas. Añadir android: inputType = "textCapSentences | textMultiLine"
Lenin

76

Simplemente utilícelo android:inputType="textCapWords"en su elemento EditText.

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" />

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


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

13
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 supone como una oración). Si bien esto probablemente ayude a los demás, la respuesta correcta es la respuesta aceptada.
Andrew T.

37

Aplique la siguiente línea en su EditText en XML.

android:inputType="textCapSentences|textMultiLine"

También permitirá el soporte multilínea.


2
Esa debería ser una respuesta aceptada, ya que esta es la única solución que no colapsará EditText en una sola línea
egorikem el

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

o android:inputType="textCapSentences"solo funcionará si la configuración de capitalización automática del teclado de su dispositivo está habilitada.


Gracias, me quedé atrapado porque acabo de deshabilitar la configuración de capitalización automática del teclado del dispositivo
Pulkit

20

Encontré el mismo problema, solo compartí lo que descubrí. Podría ayudarte a ti y a otros ...

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

android:inputType="textCapWords|textCapSentences"

funciona bien en mí ... espero que funcione también en ti ...


5

Les puedo asegurar que ambas respuestas harán mayúscula en la primera letra y no harán que edittext sea una sola línea.

Si quieres hacerlo en XMl debajo está el código

android:inputType="textCapWords|textCapSentences"

Si desea hacerlo en actividad / fragmento, etc. a continuación se encuentra el código

momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)

PD: Si no tiene otra propiedad, también puede agregarla fácilmente con una tubería "|" símbolo, solo asegúrese de que no haya espacio en xml entre las propiedades del atributo


5

Para Capitalización en EditText, puede elegir los dos tipos de entrada siguientes:

  1. android: inputType = "textCapSentences"
  2. android: inputType = "textCapWords"

textCapSentences
Esto permitirá que la primera letra de la primera palabra sea Capital en cada oración.

textCapWords Esto dejará la primera letra de cada palabra como Capital.

Si desea ambos atributos, simplemente use | firmar con ambos atributos

android:inputType="textCapSentences|textCapWords"

3

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

- establecer addTextChangedListener para la vista EditText

edt_text.addTextChangedListener (observador);

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

3

Para capitalizar, puede hacer lo siguiente con editar texto:

Para poner en mayúscula la primera letra de cada palabra :

android:inputType="textCapWords"

Para poner en mayúscula la primera letra de cada oración :

android:inputType="textCapSentences"

Para hacer cada letra mayúscula:

android:inputType="textCapCharacters"

Pero esto solo hará cambios en el teclado y el usuario puede cambiar el modo para escribir letras en minúsculas.

Por lo tanto, este enfoque no es muy apreciado si realmente desea los datos en formato de mayúsculas, agregue la siguiente clase primero:

public class CapitalizeFirstLetter {
    public static String capitaliseName(String name) {
        String collect[] = name.split(" ");
        String returnName = "";
        for (int i = 0; i < collect.length; i++) {
            collect[i] = collect[i].trim().toLowerCase();
            if (collect[i].isEmpty() == false) {
                returnName = returnName + collect[i].substring(0, 1).toUpperCase() + collect[i].substring(1) + " ";
            }
        }
        return returnName.trim();
    }
    public static String capitaliseOnlyFirstLetter(String data)
    {
        return data.substring(0,1).toUpperCase()+data.substring(1);
    }
}

Y entonces,

Ahora para capitalizar cada palabra:

CapitalizeFirstLetter.capitaliseName(name);

Para capitalizar solo la primera palabra:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

Establezca el tipo de entrada en XML, así como en un archivo JAVA como este,

En XML,

android: inputType = "textMultiLine | textCapSentences"

También permitirá líneas múltiples y en archivos JAVA,

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

asegúrese de que la configuración de Capitalización automática de su teclado esté Activada .


2

En su archivo XML de diseño:

  • conjunto android:inputType="textCapSentences"

  • En su EditTextprimer alfabeto de la primera palabra de cada oración como mayúscula

  • O android:inputType="textCapWords"en su EditText para tener el primer alfabeto de cada palabra como mayúscula


1

use este código solo con mayúscula de primera letra para EditText

MainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:tag="true">
    </EditText>

</RelativeLayout>

MainActivity.java

EditText et = findViewById(R.id.et);
        et.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
            {
                if (et.getText().toString().length() == 1 && et.getTag().toString().equals("true"))
                {
                    et.setTag("false");
                    et.setText(et.getText().toString().toUpperCase());
                    et.setSelection(et.getText().toString().length());
                }
                if(et.getText().toString().length() == 0)
                {
                    et.setTag("true");
                }
            }

            public void afterTextChanged(Editable editable) {

            }
        });

0

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

Tenga en cuenta que esto solo funcionará si la configuración de capitalización automática del teclado de su dispositivo está habilitada.

Para hacer esto programáticamente, use el siguiente método:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

fundé y mi solución: tienes 2 formas de resolverlo en Java:

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

y xml:

 <EditText
android:id="@+id/mytxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:textSize="12sp" />

0

Programáticamente

TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);

0

si está escribiendo estilos en styles.xml entonces

eliminar la propiedad android: inputType y agregar líneas debajo

<item name="android:capitalize">words</item>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.