Button metnim neden Lollipop'taki TÜM CAPS'lara zorlanıyor?


447

Yakın zamanda yeni Nexus 9 tableti (Lollipop - API 21) kullanarak uyumluluk için test ettiğim uygulamam "Tide Now WA" .

Bazı düğme metinleri yazar. Bu uygulama Android 2.3 ve Android 4.0 kullanarak metni doğru yazar. Yani büyük ve küçük harfler karışık.

Aynı uygulama Nexus 9 cihazımda çalıştırıldığında, metindeki tüm harfler büyük yazılır.

FWIW bildirimim aşağıdaki ifadeyi içerir:

uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"

Bunu kodumda düzeltebilir miyim yoksa işletim sistemindeki bir hata mı?


Büyük ve küçük harfleri nasıl karıştırdığınızın bir kodunu paylaşabilir misiniz
N Sharma

strings.xml dosyamda <string name = "r1s1"> Seattle </string> gibi tanımlanmıştır
user1644002

Evet. 21. doğru yazmak için çok erken. Üzgünüz
user1644002

23
Düğme metni, Material (veya API 21+ ile DeviceDefault) teması kullanılırken varsayılan olarak tümüyle büyük harftir. Bu amaçlandığı gibi çalışıyor.
alanv

Yanıtlar:


636

Neden olduğu hakkında bir fikrim yok, ancak 3 önemsiz girişim var:

  1. Kullan android:textAllCaps="false"içinde seninlayout-v21

  2. Düğmenin dönüştürme yöntemini programlı olarak değiştirin. mButton.setTransformationMethod(null);

  3. Allcaps stilinizi kontrol edin

Not : public void setAllCaps(boolean allCaps), android:textAllCapsolan mevcut API sürümü 14 dan.


# 1 fark yaratmadı. # 3 nasıl yapılacağından emin değil misiniz, stiliniz yok mu? Şimdi # 2 deniyor.
user1644002

2
evet, bunu ekliyor: btn [i] .setTransformationMethod (null); teşekkürler iş yapar
user1644002

2
Nikola'nın cevabını çözüm olarak kabul ediyorum, ancak soruların diğer kısmına dikkat çekmek istiyorum, yukarıdaki yorumlarda nedenini açıklayan alanv tarafından sağlandığı gibi.
user1644002

1
Benim için de çalıştı, textAllCaps XML attr sadece API> 14 desteklendiğinden programlı yöntemi kullandı. Teşekkürler!
patrickjason91

3
<item name="android:textAllCaps">false</item>Stil
Birisi

169

Değerlerim / themes.xml dosyasında yaptığım şey

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="buttonStyle">@style/MyButton</item>
    </style>

    <style name="MyButton" parent="Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
    </style>

8
API öncesi Düzey 14 desteği için kullanabilirsiniz <item name="textAllCaps">false</item>.
CommonsWare

Bu yalnızca Widget.AppCompat.Button için geçerlidir. Daha genel cevap aşağıdaki Ashish Chaugule tarafından verilir, yani tema stiline doğrudan <item name = "android: textAllCaps"> false </item> eklenir. (Sorular başlangıçta düğmeleri için özellikle istendi rağmen allCaps düğmeleri için aranan değilse, ben de menü öğeleri, eylemler, vb istenmediği, düşünmek)
user2808624

1
Benim için çalışmadı. Değiştim zaman işe Oldu buttonStyleetmekandroid:buttonStyle
Vasily Kabunov

2
XML'de android:textAllCaps="false"(android studio 3.0 kullanıyorum)
meyasir

107

Bu, düğmenin TransformationMethod ayarını yaparak uygulama kodunda düzeltilebilir, örn.

mButton.setTransformationMethod(null);

Kotlin için sözdizimi şöyledir: mButton.transformationMethod = null
Native_Mobile_Arch_Dev

66

Android'i ayarlayın: textAllCaps = "false". Bir appcompat stili kullanıyorsanız, textAllCaps'in stillerden önce geldiğinden emin olun. Aksi takdirde stil onu geçersiz kılar. Örneğin:

android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"

Bir cazibe gibi çalıştı ama benim durumumda gibi yapmak zorunda kaldım: <style name = "textAppearanceButton" parent = "@ android: style / TextAppearance.Material.Widget.Button"> <item name = "android: textAllCaps"> yanlış < / item> </style>
Vfleitao

58

bu satırı stile ekle

    <item name="android:textAllCaps">false</item>


52
BU VARSAYILAN NEDEN OLDUĞUNU BİLMİYORUM
Glenn Maynard

5
Materyal tasarımının doğasına uygun olduğu için bu malzeme temasında varsayılan
QAMAR

fakir insanlar malzeme tasarım kare kutu sıkışmış
eric

35

Bu çalışıyor .... sadece alt kodunu kodunda bunu ekleyin:

android:textAllCaps="false"

U'nun küçük yazmaya çalıştığı büyük harfleri devre dışı bırakmalıdır.


32

Lollipop varsayılanı "textAllCaps true" ile birlikte gelir, bu nedenle manuel olarak false değerine ayarlamanız gerekir


5
Bunu bilmek harika. Android sürümü başına tüm bu varsayılan değerleri listeleyen bir site varsa?
Adam


19

Tüm düğmeler için çalışan daha kolay bir yol var, sadece temanızdaki düğmelerin görünümünü değiştirin, şunu deneyin:

içinde değerler 21 / styles.xml

<resources>
    <style name="myBaseTheme"
        parent="@android:style/Theme.Material.Light">
        <item name="android:colorPrimary">@color/bg</item>
        <item name="android:colorPrimaryDark">@color/bg_p</item>
        <item name="android:textAppearanceButton">@style/textAppearanceButton</item>
    </style>

    <style name="textAppearanceButton" parent="@android:style/TextAppearance.Material.Widget.Button">
        <item name="android:textAllCaps">false</item>
    </style>
</resources>

Not: Materyal tasarım ilkelerine uymanız önerilir, büyük harflerle yazılmış metinleri Düğmelerde göstermelisiniz, http://www.google.com/design/spec/components/buttons.html


2
Kabul ediyorum, tasarım yönergelerini takip etmek harika ... düğme metni düğmeye artık sığmadan
Birisi Bir Yerde

google sadece stilleri hakkında konuşmaktan vazgeçmeli - küçük düğmeler yüzünden sokaklarda ağlama ve hıçkırık olduğunun farkında değildim!
bharal

11

XML düzeninde android.support.v7.widget.AppCompatButton öğesini kullanmak, bir düzen 21'e sahip olmaktan veya programlı olarak herhangi bir şeyi değiştirmekten kaçınmanıza olanak tanır. Doğal olarak bu, AppCompat v7 kütüphanesi ile de çalışacaktır.

<android.support.v7.widget.AppCompatButton
    android:id="@+id/btnOpenMainDemo"
    android:textAllCaps="false"
    style="@style/HGButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_main_demo"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"/>

Bu yardımcı olur umarım.


11

Bu hattı kullanın textAllCaps = "false": android senin xml

<Button
            android:id="@+id/btn_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/login_str"
            android:background="@color/colorBlue"
            android:textColor="@color/colorWhite"
            android:textAllCaps="false"
           />

9

Android Studio IDE'de, uzman özelliklerini göstermek için Filtre simgesini tıklamanız gerekir. Sonra textAllCapsözelliği göreceksiniz . Kontrol edin, ardından işaretini kaldırın.


9

Ekleyebilirsin android:textAllCaps="false"Düğmeye .

Düğme metni, uygulamanızın tüm düğmelere uygulanan temasıyla büyük harfe dönüştürülebilir. Özelliği ayarlamak için tema / stil dosyalarına bakın android:textAllCaps.


9

Java:

yourButton.setAllCaps(false);

Kotlin:

yourButton.isAllCaps = false

XML:

android:textAllCaps="false"

stiller:

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="buttonStyle">@style/yourButtonStyle</item>
    </style>

    <style name="yourButtonStyle" parent="Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
    </style>

Düzende:

   <Button
      .
      .
      style="@style/yourButtonStyle"
      .
      .
   />

4

Facebook düğme metniniz tüm büyük harflerde göründüğü için buraya geldiyseniz, bunu android:textAllCaps="false"xml dosyanıza eklemeniz yeterlidir. Benim için çalıştı.


2

Tamam, sadece bununla karşılaştı. Lollipop'taki düğmeler büyük harfle çıkar VE yazı tipi 'normal'e sıfırlanır. Ama benim durumumda (Android 5.02) bir düzende doğru çalışıyordu, ancak başka bir şekilde değil !?

API'leri değiştirmek işe yaramadı.
Tüm büyük harflerin ayarlanması için minimum API 14 gerekir ve yazı tipi yine de 'normal'e sıfırlanır.

Bunun nedeni, Android Materyal Stiller'in tanımlı biri yoksa stilde bir değişikliği zorlamasıdır (bu yüzden bir stilini tanımladığım için düzenimden birinde değil diğerinde değil) çalıştı.

Bu yüzden kolay düzeltme, benim durumumda sadece her aktivite için manifestte bir stil tanımlamaktır:
android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen"
(umarım bu birine yardımcı olur, beni bir çift kurtarırdı dün gece saat)


4
Bu çok kötü bir girişimdir, sadece düğmeleriniz için allCaps yanlış olan değer-21'de bir stil oluşturun. Eski bir temaya (burada bir Holo Teması) geri dönmek, uygulamanızı daha çirkin ve kullanıcı için daha tutarsız hale getirir.
bluewhile

2

Eğer kullanırsanız appcompat-v7, size alt sınıf AppCompatButtonve setSupportAllCaps(false)ardından tüm düğmeler için bu sınıfı kullanmak.

/**
 * Light extension of {@link AppCompatButton} that overrides ALL CAPS transformation
 */
public class Button extends AppCompatButton {
    public Button(Context context, AttributeSet attrs) {
        super(context, attrs);
        setSupportAllCaps(false);
    }

    public Button(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setSupportAllCaps(false);
    }
}

Bkz AppCompatButton # setSupportAllCaps (boolean) Android belgeler.


2

Varsayılan olarak, Android'deki Düğme tüm büyük harf anahtar sözcüğünü sağlar. Düğme metninin küçük veya karışık harf olmasını istiyorsanız, textAllCapsişaretini kullanarakandroid:textAllCaps="false"


0

@ User1010160 cevabının neden 0 puan aldığını bilmiyorum. Yeteri kadar itibarım olsaydı +1 verirdim.

Uygulamam 14'ten az API için tasarlandığından ve programıma kod eklemek istemediğimden, cevabını okuyana kadar bir çözüm bulamadım. Söylediği şey, Uygulama stillerinde gerekli olanı yapmış olsanız bile, etkinliğinize bir stil eklemedikçe ve textAllCaps'i false olarak ayarladığınız sürece çalışmayacaktır.

Etkinlik için bir stile sahip olmak yeterli değil (etkinliğim bir stile sahipti), çünkü stil varsayılan olarak AllCaps özelliğine ayarlanmış olabilir. Etkinlikte de bu özelliği false değerine ayarlamanız gerekir.

Şimdi hem uygulamada hem de manifest dosyasının Etkinlik bölümlerinde var.


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.