EditText için ilk harf büyük


383

Küçük bir kişisel yapılacaklar listesi uygulaması üzerinde çalışıyorum ve şimdiye kadar her şey oldukça iyi çalışıyor. Anlamak istediğim küçük bir tuhaflık var. Ne zaman yeni bir öğe eklemek için git, içinde bir EditText görünüm gösteren bir iletişim kutusu var. EditText görünümünü seçtiğimde, klavye metni girmesi gerektiği gibi geliyor. Çoğu uygulamada, varsayılan olarak shift tuşunun ilk harf için tutulduğu görülür ... ancak benim görüşüme göre bunu yapmaz. Düzeltmek için basit bir yol olmalı, ancak referansı tekrar tekrar aradım ve bulamıyorum. Adaptör tarafından yüklenen referans için bir xml özniteliği olması gerektiğini düşünüyorum, ama ne olduğunu bulamıyorum.

Yanıtlar:


805

Statik olarak (yani sizin Düzen XML dosyasında): Ayar android:inputType="textCapSentences"sizinle ilgili şu EditText.

Programlı: Eğer eklemek zorunda InputType.TYPE_CLASS_TEXTiçinde InputTypearasında EditText, örneğin

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

Her cümlenin ilk karakterinin büyük harf kullanımını istemek için metin ve varyasyonları ile birleştirilebilir.

- Google Dokümanlar


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); veya android: inputType = "textCapSentences" sadece cihaz klavyeniz Otomatik Büyük Harf Ayarı etkinse çalışır.
Lakshmanan

8
Neden bunu etkinleştirmek neden android:lines="7"artık 7 satır göstermiyor (şimdi varsayılan olarak 1 satıra geri dönüyor)
James Wierzba

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); veya android: inputType = "textCapSentences" sadece cihaz klavyeniz Otomatik Büyük Harf Ayarı etkinse çalışır. Bunun programlı olarak alternatifi nedir?
Swift

@JamesWierzba Burada Shivang yanıtını çok hatlı destek için yanıt olarak anlatacağım. Android ekle: inputType = "textCapSentences | textMultiLine"
Lenin

76

android:inputType="textCapWords"EditText öğenizde kullanın .

Örneğin:

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

Referans için aşağıdaki bağlantıya bakın: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


Kodu kod öğesinde işaretlemek yerine kalın yapmak iyi bir uygulamadır.
Ravi Bhatt

13
Bu cevap OP'nin sorusuna gerçekten yardımcı olmuyor. Bu, her cümlenin ilk karakterini büyük harfle yazacaktır , giriş metninin ilk karakterini değil (cümle olarak kabul edilir). Bu muhtemelen diğerlerine yardımcı olabilirken, doğru cevap kabul edilen cevaptır.
Andrew T.

37

XML'de EditText'inize aşağıdaki satırı uygulayın.

android:inputType="textCapSentences|textMultiLine"

Ayrıca çok hatlı desteğe de izin verir.


2
EditText'i tek satıra daraltmayacak tek çözüm bu kabul edilen bir cevap olmalı
egorikem

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

veya android:inputType="textCapSentences"yalnızca cihaz klavyeniz Otomatik Büyük Harf Ayarı etkinse çalışır.


Teşekkürler, takıldım çünkü cihaz klavyesini devre dışı
bıraktım

20

Aynı problemle karşılaştım, sadece öğrendiklerimi paylaştım. Size ve başkalarına yardımcı olabilir ...

Bunu mizanpajınızda deneyin EditText.

android:inputType="textCapWords|textCapSentences"

benim için iyi çalışıyor .. umarım senin üzerinde de çalışır ...


5

Her iki cevabın da ilk harfi büyük yazacağını ve edittext'i tek satır yapmayacağından emin olabilirim.

Aşağıdaki XMl'de yapmak istiyorsanız kod

android:inputType="textCapWords|textCapSentences"

Aşağıdaki etkinlik / parça vb. Yapmak istiyorsanız, kod

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

Not: Başka bir mülkünüz varsa, kolayca bir boru "|" ile de ekleyebilirsiniz. sembolünde, xml içinde nitelik özellikleri arasında boşluk olmadığından emin olun.


5

EditText'te Büyük Harf Kullanımı için aşağıdaki iki giriş türünü seçebilirsiniz:

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

textCapSentences
Bu, her cümlede ilk sözcüğün ilk harfinin Büyük harf olarak kullanılmasını sağlar.

textCapWords Bu, her kelimenin ilk harfini Büyük harf olarak verir.

Her iki özelliği de istiyorsanız sadece | her iki özellik ile imzala

android:inputType="textCapSentences|textCapWords"

3

Bu Kodu deneyin, tüm kelimelerin ilk karakterini büyük harfe çevirir.

- EditText görünümü için addTextChangedListener'ı ayarla

edt_text.addTextChangedListener (izleyici);

- TextWatcher Ekle

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

Büyük harf kullanmak için aşağıdakileri düzenleme metniyle yapabilirsiniz:

Her kelimenin ilk harfini büyük yapmak için :

android:inputType="textCapWords"

Her cümlenin ilk harfini büyük yapmak için :

android:inputType="textCapSentences"

Her harfi büyük yapmak için :

android:inputType="textCapCharacters"

Ancak bu sadece klavyede değişiklik yapar ve kullanıcı küçük harfle mektup yazma modunu değiştirebilir.

Bu yüzden, verileri gerçekten büyük harf biçiminde istiyorsanız, önce aşağıdaki sınıfı ekleyin:

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

Ve sonra,

Şimdi her kelimeyi büyük harfle kullanmak için:

CapitalizeFirstLetter.capitaliseName(name);

Yalnızca ilk kelimeyi büyük yapmak için:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

XML'de olduğu gibi JAVA dosyasında da girdi türünü ayarlayın,

XML'de,

android: InputType = "textMultiLine | textCapSentences"

Ayrıca çok satırlı ve JAVA dosyasında,

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

klavyenizin Otomatik Büyük Harf ayarının Etkin olduğundan emin olun .


2

Düzen XML dosyanızda:

  • Ayarlamak android:inputType="textCapSentences"

  • Aşağıdaki yerlerde de EditTextsermaye olarak her cümlenin ilk kelimenin ilk alfabe olması

  • Veya android:inputType="textCapWords"EditText'inizde her kelimenin ilk alfabesinin büyük harf olması


1

Bu kodu yalnızca EditText için ilk harf büyük harf yapmak için kullanın

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

Daha önce android:capitalize="words", artık kullanımdan kaldırılmıştı. Önerilen alternatifandroid:inputType="textCapWords"

Bunun yalnızca cihaz klavyeniz Otomatik Büyük Harf Ayarı etkinse çalışır.

Bunu programlı olarak yapmak için aşağıdaki yöntemi kullanın:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

Ben kurdu ve benim çözüm: java çözmek için 2 yolu var:

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

ve xml:

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

0

Programlı

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

0

styles.xml dosyasında stiller yazıyorsanız,

android: inputType özelliğini kaldırın ve aşağıdaki satırları ekleyin

<item name="android:capitalize">words</item>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.