Duże litery w EditText


383

Pracuję nad małą osobistą aplikacją do listy rzeczy do zrobienia i do tej pory wszystko działało całkiem dobrze. Jest jedno małe dziwactwo, które chciałbym zrozumieć. Ilekroć idę, aby dodać nowy element, mam okno dialogowe z widokiem EditText pokazującym wewnątrz. Kiedy wybieram widok EditText, klawiatura pojawia się, aby wprowadzić tekst, tak jak powinien. W większości aplikacji domyślnie wydaje się, że klawisz Shift jest przytrzymywany dla pierwszej litery ... chociaż nie robi tego dla mojego widoku. Musi istnieć prosty sposób, aby to naprawić, ale wielokrotnie przeszukiwałem referencję i nie mogę jej znaleźć. Myślę, że musi istnieć atrybut xml dla referencji ładowanej przez Adapter, ale nie mogę się dowiedzieć, co to jest.

Odpowiedzi:


805

Statycznie (tzn. W pliku XML układu): ustaw android:inputType="textCapSentences"na swoim EditText.

Programowo: trzeba to InputType.TYPE_CLASS_TEXTw InputTypez EditText, na przykład

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

Można łączyć z tekstem i jego odmianami, aby zażądać wielkich liter pierwszego znaku każdego zdania.

- Dokumenty Google


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); lub android: inputType = "textCapSentences" będzie działał tylko wtedy, gdy włączona jest funkcja Auto Capitalize Setting na klawiaturze urządzenia.
Lakshmanan,

8
Dlaczego włączenie tej opcji powoduje, że my android:lines="7"nie pokazuje już 7 linii (teraz domyślnie wraca do 1 linii)
James Wierzba

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); lub android: inputType = "textCapSentences" będzie działał tylko wtedy, gdy włączona jest funkcja Auto Capitalize Setting na klawiaturze urządzenia. Jaka jest alternatywa programowo?
Swift

@JamesWierzba Odniosę się tutaj do odpowiedzi Shivang jako odpowiedzi na obsługę wielu linii. Dodaj Androida: inputType = "textCapSentences | textMultiLine"
Lenin

76

Wystarczy użyć android:inputType="textCapWords"w elemencie EditText.

Na przykład:

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

Odwołaj się do następującego łącza: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


Dobrą praktyką jest zaznaczanie kodu w elemencie kodu zamiast pogrubienia go.
Ravi Bhatt

13
Ta odpowiedź tak naprawdę nie pomaga na pytanie OP. Spowoduje to wstawienie pierwszego znaku dla każdego słowa , a nie pierwszego znaku tekstu wejściowego (który jest traktowany jako zdanie). Chociaż może to prawdopodobnie pomóc innym, poprawna odpowiedź jest odpowiedzią zaakceptowaną.
Andrew T.,

37

Zastosuj następujący wiersz w EditText w XML.

android:inputType="textCapSentences|textMultiLine"

Umożliwi także obsługę wielu linii.


2
To powinna być zaakceptowana odpowiedź, ponieważ jest to jedyne rozwiązanie, które nie zwinie EditText w jednym wierszu
egorikem

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

lub android:inputType="textCapSentences"będzie działać tylko, jeśli włączona jest funkcja automatycznego ustawiania wielkich liter na klawiaturze urządzenia.


Dzięki, utknąłem, ponieważ właśnie wyłączyłem ustawienia klawiatury Auto Capitalize Setting
Pulkit

20

Napotkałem ten sam problem, po prostu dzieląc się tym, co odkryłem. Może pomóc tobie i innym ...

Wypróbuj to na swoim układzie. Dodaj poniższy wiersz w swoim EditText.

android:inputType="textCapWords|textCapSentences"

działa dobrze na mnie .. mam nadzieję, że działa również na ciebie ...


5

Zapewniam cię, że obie odpowiedzi sprawią, że pierwsza litera będzie duża i nie utworzą pojedynczego wiersza.

Jeśli chcesz to zrobić w XMl poniżej, jest kod

android:inputType="textCapWords|textCapSentences"

Jeśli chcesz to zrobić w działaniu / fragmencie itp. Poniżej znajduje się kod

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

PS: Jeśli masz inną właściwość, możesz ją łatwo dodać za pomocą potoku „|” symbol, po prostu upewnij się, że między właściwościami atrybutu nie ma spacji w pliku XML


5

Dla wielkich liter w EditText możesz wybrać dwa poniższe typy wprowadzania:

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

textCapSentences
Pozwoli to pierwszej literze pierwszego słowa jako Stolicy w każdym zdaniu.

textCapWords Spowoduje to, że pierwsza litera każdego słowa będzie wielka .

Jeśli chcesz oba atrybuty, po prostu użyj | podpisać za pomocą obu atrybutów

android:inputType="textCapSentences|textCapWords"

3

Wypróbuj ten kod, użyje on pierwszego znaku wszystkich słów.

- ustaw addTextChangedListener dla widoku EditText

edt_text.addTextChangedListener (watcher);

- Dodaj 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

Aby używać wielkich liter, możesz wykonać następujące czynności, edytując tekst:

Aby utworzyć pierwszą literę każdego słowa :

android:inputType="textCapWords"

Aby utworzyć pierwszą literę każdego zdania :

android:inputType="textCapSentences"

Aby każda litera była wielka:

android:inputType="textCapCharacters"

Spowoduje to jednak jedynie zmiany w klawiaturze, a użytkownik może zmienić tryb pisania literą w małych literach.

Więc to podejście nie jest bardzo doceniane, jeśli naprawdę chcesz, aby dane były w formacie wielkich liter, najpierw dodaj następującą klasę:

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

I wtedy,

Teraz wielkie litery każdego słowa:

CapitalizeFirstLetter.capitaliseName(name);

Aby używać tylko pierwszego słowa:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

Ustaw typ danych wejściowych w XML, a także w pliku JAVA w ten sposób,

W XML

android: inputType = "textMultiLine | textCapSentences"

Pozwoli również na wieloliniowy oraz w pliku JAVA,

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

upewnij się, że ustawienie Automatycznej kapitalizacji na klawiaturze jest włączone .


2

W pliku XML układu:

  • zestaw android:inputType="textCapSentences"

  • Na EditTextmasz pierwszy alfabet pierwszego słowa każdego zdania jako kapitał

  • Lub android:inputType="textCapWords"w tekście EditText, aby mieć pierwszy alfabet każdego słowa jako wielką literę


1

użyj tego kodu, aby użyć tylko wielkich liter w 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

Wcześniej był android:capitalize="words", a obecnie jest przestarzały. Zalecaną alternatywą jest użycieandroid:inputType="textCapWords"

Pamiętaj, że zadziała to tylko wtedy, gdy włączona jest funkcja automatycznego ustawiania wielkich liter na klawiaturze urządzenia.

Aby to zrobić programowo, użyj następującej metody:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

założyłem i moje rozwiązanie: masz 2 sposoby na rozwiązanie tego w java:

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

i xml:

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

0

Programowo

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

0

jeśli piszesz style w styles.xml, to

usuń właściwość android: inputType i dodaj poniższe wiersze

<item name="android:capitalize">words</item>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.