Android EditText'te büyük harf yazmaya nasıl zorlanırsınız?


144

Android uygulamamda EditTextkullanıcının bilgi girebileceği yerler farklı . Ama kullanıcıyı büyük harflerle yazmaya zorlamam gerekiyor. Bunu yapmak için bir işlev biliyor musunuz?

Yanıtlar:


340

Android aslında sadece bunun için yerleşik bir InputFilter var !

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

Dikkatli olun, setFilters tüm diğer özelliklerini sıfırlar XML yoluyla belirlenmiştir (yani maxLines, inputType, imeOptinos...). Bunu önlemek için, mevcut filtrelere filtre ekleyin.

InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;  
<EditText>.setFilters(newFilters);

3
Evet! Bu en iyi cevap! Kod edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});olsa olmalı .
Arthur

4
Tamam, millet haklısın, cevabımı güncelledim. Bunu geliştirmeye yardımcı olduğunuz için teşekkürler !!
ErlVolton

4
Xml (örneğin maxLength) için ayarladığınız filtrelerin geçersiz kılınmasını önlemek için , InputFilter.AllCaps()to editText.getFiltersdizisini eklemeyi deneyin . Bkz. Stackoverflow.com/a/18934659/3890983
tropicalfish

21
Veya editText.filters = editText.filters + InputFilter.AllCaps()
Kotlin'de

4
Daha da iyisi: editText.filters += InputFilter.AllCaps()Kotlin harika! <3
Milack27

123

Kullanıcıyı EditText'inizde varsayılan olarak büyük harflerle yazmaya zorlamak istiyorsanız , eklemeniz yeterlidir android:inputType="textCapCharacters". (Kullanıcı yine de manuel olarak küçük harfe dönüşebilir.)


39
Hiçbir şey Kullanıcının 'üst karakter' tuşuna basmasını ve küçük harf yazılmasını engellemez.
Fernando Leal

Fernando ile aynı fikirde, klavyeyi büyük harflere çevirirken, gerektirmiyor.
pforhan

Kullanıcı @Fernando
Ajinkya

24

Set input typeiçin TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS. keyboardBu onur.


android: inputType = "textCapCharacters"
Parth Kapoor

18

İki şekilde kullanabilirsiniz.

İlk Yol:

android:inputType="textCapSentences"EditText üzerinde ayarlayın .

İkinci Yol:

Kullanıcı numarayı girdiğinde, metin izleyiciyi kullanmanız ve küçük harf olarak büyük harfe değiştirmeniz gerekir.

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
         edittext.setSelection(edittext.length()); //fix reverse texting
      }
    }
});  

2
dize ters sırada ayarladığından çözümünüz çalışmaz.
co2f2e

hangi şekilde birinci veya ikinci kullandınız.
Harshid

Birincisi hiç çalışmıyor. İkincisi metni büyük harf yapar, ancak imleci programlı olarak cümlenin sonuna getirmeliyiz.
co2f2e

@Kalanamith ya sonra sorun nedir
Harshid

6
İlk seçenek için textCapSentences cümleleri büyük yazıyorsa, textCapCharacters'a ihtiyacınız var.
Ghoti

13

Ekleyebilir android:textAllCaps="true"EditText içinde xml dosyasına özelliği. Bu, yumuşak giriş klavyesinin tüm büyük harf modunda görünmesini sağlar. Girdiğiniz değer Büyük Harf'te görünecektir. Ancak bu, kullanıcının yalnızca UpperCaseharf girebilmesini sağlamaz . Eğer isterse, yine de küçük harflere geri dönebilirler. EdittextÇıkışının Tümü büyük harf olduğundan emin olmak istiyorsanız toUpperCase(), Stringsınıf yöntemini kullanarak giriş Dizesini el ile dönüştürmeniz gerekir .


@GustavoAlves, Bunu denediğinde bana ne olduğunu söyleyebilir misin? Belki senin sorununa bakabilirim. :)
Abhishek

Merhaba @Abhishek. Özelliği ayarlamak hiçbir şeyi değiştirmedi. EditText hala büyük ve küçük harfleri kabul eder.
Gus Costa

1
Evet, EditText'inizi sadece Büyük harf karakterleri kabul edecek şekilde kısıtlamak istiyorsanız, android: inputType = "textCapCharacters" doğru seçenek olacaktır. Bir deneyin ve sonra bana bildirin. ☺️
Abhishek

1
Bu her yazdığımda neden ve dizin sınırlarının dışında istisna.
Zapnologica

2
android:textAllCaps="true"yalnızca TextView özelliğidir ( stackoverflow.com/a/28803492/5268730 ). android:inputType="textCapCharacters"Bunun yerine kullanın .
woodii

11

Sen koymalıyız android:inputType="textCapCharacters"xml dosyasında EditText ile.


9
AoyamaNanami tam olarak aynı cevabı yazdı. Lütfen daha güncel sorulara odaklanın, bu 2013'ten. :)
ByteHamster

2
Kullanıcının alt karakterleri değiştirebileceğine ve girebileceğine dikkat edin
Rafa0809

10

Klavyeyle uğraşmaktan endişe etmek yerine, neden sadece herhangi bir giriş, küçük harf veya büyük harf kabul etmiyor ve dizeyi büyük harfe dönüştürmüyorsunuz?

Aşağıdaki kod yardımcı olacaktır:

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

Bu kullanıcı dostudur, çünkü kullanıcının dizgeye büyük harfle ihtiyacınız olduğunu bilmesine gerek yoktur. Bu yardımcı olur umarım.


9

Daha da iyisi ... bir liner içinde KOTLIN ...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

Bitti!


2
Bu özelliği erişim erişim sözdizimini kullanarak yazabilirsiniz: <your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
Makotosan

8
Daha da iyisi:<your_edit_text>.filters += InputFilter.AllCaps()
Makotosan

9

In KOTLIN , .kt dosya marka değişiklikler:

edit_text.filters = edit_text.filters + InputFilter.AllCaps()

Kimliğine sahip widget'ın doğrudan erişimi için sentetik özelliği kullanın. Ve XML'de, düzenleme metniniz için birkaç bayrak ekleyin:

<EditText
    android:id="@+id/edit_text_qr_code"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...other attributes...
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
    />

Bu, klavyeyi büyük harf etkin olarak güncelleyecektir.


8

Giriş filtresini kullan

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

6
edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
      editText.setSelection(editText.getText().length());
    }
});  

6

Sadece bunu yap:

// ****** Every first letter capital in word *********
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    />

//***** if all letters are capital ************

    android:inputType="textCapCharacters"

5

Aşağıdaki kodlardan herhangi birini kullanmayı deneyin sorununuzu çözebilir.

programlama:

editText.filters = editText.filters + InputFilter.AllCaps()

XML:

android:inputType="textCapCharacters" with Edittext

4

Benim için android ekleyerek çalıştı : textAllCaps = "true" ve android: inputType = "textCapCharacters"

<android.support.design.widget.TextInputEditText
                    android:layout_width="fill_parent"
                    android:layout_height="@dimen/edit_text_height"
                    android:textAllCaps="true"
                    android:inputType="textCapCharacters"
                    />

3

Tüm büyük harfleri elde etmek için XML'nizde aşağıdakileri kullanın:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>

2
bu çözümü denedin mi? Bu, kullanıcı editext içeriğini düzenlemeye başladığında uygulamanın çökmesine neden olur
surhidamatya

3

Bu kodu deneyin, girişinizi büyük harfe dönüştürür

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

2

Kabul edilen cevaba dayanarak, bu cevap aynı şeyi yapar, ancak Kotlin'de. Sadece kopya yapıştırma işlemini kolaylaştırmak için: ·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}

1
filters += InputFilter.AllCaps(): D
crgarridos

1

Metni düzenle'yi tıkladığınızda büyük harfli klavye almak için xml'nizde bu kodu kullanın,

<EditText
    android:id="@+id/et"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:hint="Input your country"
    android:padding="10dp"
    android:inputType="textCapCharacters"
    />

1

Uygulamamı Android 5.1 ve Android 6.0 (her ikisinde de aynı apk yüklü) için Visual Studio 2015 / Xamarin kullanıyorum.

android:inputType="textCapCharacters"Axml'de belirttiğimde , AllCaps klavye Android 6.0'da beklendiği gibi göründü, ancak Android 5.1'de görünmedi. Eklediğim android:textAllCaps="true"Android 5.1 benim axml ve hala AllCaps klavyesine. Kullanarak bir filtre ayarladım EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });ve yazılım klavyesi Android 5.1'de küçük harfler gösterirken, giriş alanı artık AllCaps.

EDIT: Gözlemlediğim ve işletim sistemi ile ilgili olduğunu düşündüğüm davranışsal farklılıklar aslında test cihazlarında Google Klavye'nin farklı sürümlerine sahip olmamdı. Cihazları en son Google Klavye'ye güncelledikten sonra (bu yazıdan Temmuz 2016'da yayınlandı), 'Tümü Büyük Harfler' davranışı işletim sistemlerinde tutarlıydı. Şimdi, tüm cihazlar klavyede küçük harfler gösteriyor, ancak giriş nedeniyle Tümü Büyük HarfSetFilters(new IInputFilter[] { new InputFilterAllCaps() });


1
Merhaba Tony, 2 hesap oluşturdunuz gibi görünüyor; stackoverflow.com/users/6764633/tony-celia ve stackoverflow.com/users/6771440/deeveedee . Bunları birleştirmek istiyorsanız, bkz. Stackoverflow.com/help/merging-accounts .
Matt

Teşekkürler, Matt. Bunu yeni başlayanlara / hatalara kadar tebeşirleyin. Siz anlayana kadar başka bir hesap oluşturduğumu hatırlamıyordum. Neyse ki, hesap birleştirme işlevi basitti. Harika bir forum!
Tony

1

ErlVolton'un cevabının Xamarin eşdeğeri:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());

Bu yüzden C # 'ın nasıl bu kadar özlü olabileceğini seviyorum.
Lionet Chen

1

Basit kotlin gerçekleştirme

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

PS benim filtersiçin başlangıçta her zaman boş


0

Önerilen çözümün Java 1-astarı şunlar olabilir:

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

İhtiyacı olduğunu unutmayın com.google.common.collect.Lists.


-1

Basitçe, xml dosyanızın EditText'ine aşağıdaki kodu ekleyin.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Hem büyük harf hem de rakamlara izin vermek istiyorsanız aşağıdaki kodu kullanın.

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

2
Bu kesinlikle işe yarıyor, ama çok hoş bir kullanıcı deneyimi değil. Sadece denedim ve klavye (en azından N'de) otomatik olarak büyük harf yazmadığından, küçük harfli karakterler sadece kullanıcıya geri bildirim olmadan yok sayılır ve kullanıcı arayüzü bozuk görünür.
MattMatt

@MattMatt ile tamamen aynı fikirde. Bunu yaparsak, kullanıcı küçük harf yazamaz. Kullanıcı istediği her türlü durumu yazabilmeli ve geri kalanı kelimeleri otomatik olarak büyük harflerle
Mir Adnan
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.