Großbuchstaben für EditText


383

Ich arbeite an einer kleinen persönlichen ToDo-Listen-App und bisher hat alles ganz gut funktioniert. Es gibt eine kleine Eigenart, die ich gerne herausfinden würde. Immer wenn ich ein neues Element hinzufüge, wird ein Dialogfeld mit einer EditText-Ansicht angezeigt. Wenn ich die EditText-Ansicht auswähle, wird die Tastatur angezeigt, um den gewünschten Text einzugeben. In den meisten Anwendungen scheint die Standardeinstellung zu sein, dass die Umschalttaste für den ersten Buchstaben gedrückt gehalten wird ... obwohl dies meiner Ansicht nach nicht der Fall ist. Es muss einen einfachen Weg geben, dies zu beheben, aber ich habe die Referenz wiederholt durchsucht und kann sie nicht finden. Ich denke, es muss ein XML-Attribut für die vom Adapter geladene Referenz geben, aber ich kann nicht herausfinden, was es ist.

Antworten:


805

Statisch (dh in Ihrer Layout-XML-Datei): Stellen Sie android:inputType="textCapSentences"Ihre ein EditText.

Programmatisch: müssen Sie gehören InputType.TYPE_CLASS_TEXTin die InputTypeder EditText, zB

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

Kann mit Text und seinen Variationen kombiniert werden, um die Großschreibung des ersten Zeichens jedes Satzes anzufordern.

- Google Dokumente


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); oder android: inputType = "textCapSentences" funktioniert nur, wenn die automatische Großschreibung Ihrer Gerätetastatur aktiviert ist.
Lakshmanan

8
Warum führt das Aktivieren dazu, dass ich android:lines="7"keine 7 Zeilen mehr zeige (standardmäßig ist es wieder 1 Zeile)
James Wierzba

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); oder android: inputType = "textCapSentences" funktioniert nur, wenn die automatische Großschreibung Ihrer Gerätetastatur aktiviert ist. Was ist die Alternative dazu, programmatisch?
Swift

@ JamesWierzba Ich werde hier Shivang Antwort als Antwort für mehrzeilige Unterstützung beziehen. Android hinzufügen: inputType = "textCapSentences | textMultiLine"
Lenin

76

Benutz einfach android:inputType="textCapWords" Sie einfach in Ihrem EditText-Element.

Zum Beispiel:

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

Weitere Informationen finden Sie unter folgendem Link: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


Es wird empfohlen, den Code im Codeelement zu markieren und ihn stattdessen fett zu machen.
Ravi Bhatt

13
Diese Antwort hilft der Frage von OP nicht wirklich. Dadurch wird das erste Zeichen für jedes Wort großgeschrieben , nicht das erste Zeichen des Eingabetextes (der als Satz angenommen wird). Während dies wahrscheinlich den anderen helfen kann, ist die richtige Antwort die akzeptierte Antwort.
Andrew T.

37

Wenden Sie die folgende Zeile in Ihrem EditText in XML an.

android:inputType="textCapSentences|textMultiLine"

Es wird auch Unterstützung für mehrere Leitungen ermöglichen.


2
Das sollte eine akzeptierte Antwort sein, da dies die einzige Lösung ist, die EditText nicht in eine Zeile zusammenfasst
egorikem

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

oder android:inputType="textCapSentences"funktioniert nur, wenn die automatische Großschreibung Ihrer Gerätetastatur aktiviert ist.


Vielen Dank, ich steckte fest, weil ich gerade die automatische Großschreibung der
Gerätetastatur

20

Ich bin auf das gleiche Problem gestoßen, indem ich nur das geteilt habe, was ich herausgefunden habe. Könnte dir und anderen helfen ...

Versuchen Sie dies in Ihrem Layout. Fügen Sie die folgende Zeile in Ihr Layout ein EditText.

android:inputType="textCapWords|textCapSentences"

funktioniert gut bei mir .. hoffe es funktioniert auch bei dir ...


5

Ich kann Ihnen versichern, dass beide Antworten Großbuchstaben und keine einzelne Zeile enthalten.

Wenn Sie dies in XMl tun möchten, finden Sie unten den Code

android:inputType="textCapWords|textCapSentences"

Wenn Sie dies in Aktivität / Fragment usw. tun möchten, finden Sie unten den Code

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

PS: Wenn Sie keine andere Eigenschaft haben, können Sie diese auch einfach mit einer Pipe "|" hinzufügen. Stellen Sie einfach sicher, dass in XML kein Leerzeichen zwischen den Attributeigenschaften vorhanden ist


5

Für die Großschreibung in EditText können Sie die folgenden zwei Eingabetypen auswählen:

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

textCapSentences
Hiermit wird der erste Buchstabe des ersten Wortes in jedem Satz als Großbuchstabe angegeben.

textCapWords Hiermit wird der erste Buchstabe jedes Wortes als Großbuchstabe angegeben.

Wenn Sie beide Attribute möchten, verwenden Sie einfach | Zeichen mit beiden Attributen

android:inputType="textCapSentences|textCapWords"

3

Versuchen Sie diesen Code, es wird das erste Zeichen aller Wörter groß geschrieben.

- Setzen Sie addTextChangedListener für die EditText-Ansicht

edt_text.addTextChangedListener (Beobachter);

- Fügen Sie TextWatcher hinzu

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

Um Kapital zu schlagen, können Sie mit dem Bearbeiten von Text Folgendes tun:

Um jedes Wort mit einem Großbuchstaben zu versehen :

android:inputType="textCapWords"

Um jeden Satz mit einem Großbuchstaben zu versehen :

android:inputType="textCapSentences"

Um jeden Buchstaben groß zu machen :

android:inputType="textCapCharacters"

Dadurch werden jedoch nur Änderungen an der Tastatur vorgenommen, und der Benutzer kann den Modus zum Schreiben von Briefen in kleinen Fällen ändern.

Daher wird dieser Ansatz nicht sehr geschätzt, wenn Sie die Daten wirklich im Großbuchstabenformat haben möchten. Fügen Sie zuerst die folgende Klasse hinzu:

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

Und dann,

Um nun jedes Wort groß zu schreiben:

CapitalizeFirstLetter.capitaliseName(name);

Um nur das erste Wort groß zu schreiben:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

Stellen Sie den Eingabetyp sowohl in XML als auch in einer JAVA-Datei wie folgt ein:

In XML

android: inputType = "textMultiLine | textCapSentences"

Es wird auch mehrzeilig und in JAVA-Datei erlaubt ,

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

Stellen Sie sicher, dass die Einstellung für die automatische Großschreibung Ihrer Tastatur aktiviert ist .


2

In Ihrer Layout-XML-Datei:

  • einstellen android:inputType="textCapSentences"

  • Auf Ihr EditTexterstes Alphabet des ersten Wortes jedes Satzes als Großbuchstaben

  • Oder android:inputType="textCapWords"in Ihrem EditText, um das erste Alphabet jedes Wortes als Großbuchstaben zu haben


1

Verwenden Sie diesen Code nur zur Großschreibung von Anfangsbuchstaben für 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

Früher war es so android:capitalize="words", dass es jetzt veraltet ist. Die empfohlene Alternative ist die Verwendungandroid:inputType="textCapWords"

Bitte beachten Sie, dass dies nur funktioniert, wenn die automatische Großschreibung Ihrer Gerätetastatur aktiviert ist.

Verwenden Sie dazu die folgende Methode:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

Ich gründete und meine Lösung: Sie haben zwei Möglichkeiten, um es in Java zu lösen:

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

und xml:

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

0

Programmatisch

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

0

Wenn Sie Stile in styles.xml schreiben, dann

Entfernen Sie die Eigenschaft android: inputType und fügen Sie die folgenden Zeilen hinzu

<item name="android:capitalize">words</item>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.