Mengapa Teks tombol saya dipaksa untuk SEMUA CAPS di Lollipop?


447

Di aplikasi saya "Tide Now WA" yang baru-baru ini saya uji kompatibilitasnya menggunakan tablet Nexus 9 baru (Lollipop - API 21).

Itu menulis beberapa tombol teks. Aplikasi ini menulis teks dengan benar menggunakan Android 2.3 dan Android 4.0. Yakni campuran modal dan huruf kecil.

Ketika aplikasi yang sama dijalankan pada Nexus 9 saya, semua huruf dalam teks ditulis dengan huruf kapital.

FWIW manifes saya mengandung pernyataan berikut:

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

Bisakah saya memperbaikinya dalam kode saya atau itu bug di OS terima kasih


Dapatkah Anda membagikan kode bagaimana Anda mencampur huruf kapital dan huruf kecil
N Sharma

mereka didefinisikan di strings.xml saya seperti <string name = "r1s1"> Seattle </string>
user1644002

Iya. 21. terlalu dini untuk mengetik dengan benar. Maaf
user1644002

23
Teks tombol adalah huruf besar semua secara default saat menggunakan tema Material (atau DeviceDefault with API 21+). Ini berfungsi sebagaimana dimaksud.
alanv

Jawaban:


636

Saya tidak tahu mengapa itu terjadi tetapi ada 3 upaya sepele untuk membuat:

  1. Gunakan android:textAllCaps="false"dilayout-v21

  2. Secara terprogram mengubah metode transformasi tombol. mButton.setTransformationMethod(null);

  3. Periksa gaya Anda untuk Allcaps

Catatan : public void setAllCaps(boolean allCaps), android:textAllCapsyang tersedia dari API versi 14.


# 1 tidak membuat perbedaan. Tidak yakin bagaimana melakukan # 3, tidak punya gaya? Sekarang coba # 2.
user1644002

2
ya, menambahkan ini: btn [i] .setTransformationMethod (null); membuatnya berfungsi berkat
user1644002

2
Saya menerima jawaban Nikola sebagai solusinya, tetapi saya ingin menunjukkan bagian lain dari pertanyaan-pertanyaan itu seperti yang disediakan oleh alanv, yang menjelaskan mengapa dalam komentar di atas.
user1644002

1
Bekerja untuk saya juga, menggunakan metode program sejak textAllCaps XML attr hanya didukung API> 14. terima kasih!
patrickjason91

3
Saya menggunakan <item name="android:textAllCaps">false</item>definisi gaya saya
Seseorang di suatu tempat

169

Inilah yang saya lakukan di nilai / themes.xml saya

    <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
Untuk dukungan pra-API Level 14, Anda dapat menggunakan <item name="textAllCaps">false</item>.
CommonsWare

Ini hanya berlaku untuk Widget.AppCompat.Tombol. Jawaban yang lebih umum diberikan oleh Ashish Chaugule di bawah ini, yaitu menambahkan langsung <item name = "android: textAllCaps"> false </item> ke gaya-tema. (Meskipun pertanyaan awalnya ditanyakan terutama untuk tombol, saya pikir jika allCaps tidak diinginkan untuk tombol, itu juga tidak dicari untuk menu-item, tindakan, dll.)
user2808624

1
Tidak bekerja untuk saya. Menjadi bekerja ketika saya berubah buttonStylemenjadiandroid:buttonStyle
Vasily Kabunov

2
Dalam XML android:textAllCaps="false"(Saya Menggunakan Android Studio 3.0)
meyasir

107

Ini dapat diperbaiki dalam kode aplikasi dengan mengatur TransformationMethod tombol, misalnya

mButton.setTransformationMethod(null);

Untuk Kotlin, sintaksnya adalah: mButton.transformationMethod = null
Native_Mobile_Arch_Dev

66

Set android: textAllCaps = "false". Jika Anda menggunakan gaya appcompat, pastikan textAllCaps datang sebelum gaya. Kalau tidak, gaya akan menimpanya. Sebagai contoh:

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

Bekerja seperti pesona tetapi pada kasus saya saya harus melakukan seperti: <style name = "textAppearanceButton" parent = "@ android: style / TextAppearance.Material.Widget.Button"> <item name = "android: textAllCaps"> false < / item> </style>
Vfleitao

58

tambahkan baris ini dengan gaya

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


52
AKU TIDAK TAHU MENGAPA MEREKA AKAN MEMBUAT DEFAULT INI
Glenn Maynard

5
Ini adalah standar dalam tema material, karena sesuai dengan sifat desain material
QAMAR

orang-orang miskin terjebak dalam kotak persegi desain material
eric

35

ini berfungsi .... hanya dalam kode Anda di kode bawah Anda tambahkan satu ini:

android:textAllCaps="false"

itu harus menonaktifkan huruf besar yang Anda coba ketik kecil.


32

Lollipop default dilengkapi dengan "textAllCaps true", jadi Anda harus membuatnya secara manual menjadi false


5
Itu bagus untuk diketahui. Jika ada situs yang mencantumkan semua nilai default ini per versi Android?
Adam


19

Ada cara yang lebih mudah yang berfungsi untuk semua tombol, cukup ubah tampilan tombol di tema Anda, coba ini:

di values-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>

PS: disarankan untuk mengikuti prinsip-prinsip desain material, Anda harus menunjukkan teks dengan huruf besar di Buttons, http://www.google.com/design/spec/components/buttons.html


2
Saya setuju, senang mengikuti pedoman desain ... sampai teks tombol tidak lagi pas di tombol
Seseorang Di Suatu Tempat

Google seharusnya berhenti berbicara tentang gaya - saya tidak sadar ada ppl yang menangis dan terisak di jalanan karena tombol huruf kecil!
bharal

11

Menggunakan android.support.v7.widget.AppCompatButton dalam tata letak XML akan memungkinkan Anda untuk menghindari keharusan memiliki tata letak-21 atau secara terprogram mengubah apa pun. Tentu ini juga akan berfungsi dengan pustaka AppCompat v7.

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

Semoga ini membantu.


11

Gunakan baris ini android: textAllCaps = "false" di xml Anda

<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

Di Android Studio IDE, Anda harus mengklik ikon Filter untuk menampilkan properti ahli. Maka Anda akan melihat textAllCapsproperti. Periksa, lalu hapus centang.


9

Anda bisa menambahkan android:textAllCaps="false"ke tombol.

Teks tombol mungkin diubah menjadi huruf besar oleh tema aplikasi Anda yang berlaku untuk semua tombol. Periksa file tema / gaya untuk mengatur atribut android:textAllCaps.


9

Jawa:

yourButton.setAllCaps(false);

Kotlin:

yourButton.isAllCaps = false

XML:

android:textAllCaps="false"

Gaya:

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

Dalam tata letak:

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

4

Jika Anda telah tiba di sini karena teks tombol facebook Anda muncul di semua huruf besar maka tambahkan saja ini android:textAllCaps="false"dalam file xml Anda. Ini berhasil untuk saya.


2

OK, baru saja berlari ke ini. Tombol di Lollipop keluar semua huruf besar DAN font ulang ke 'normal'. Tetapi dalam kasus saya (Android 5.02) itu berfungsi dalam satu tata letak dengan benar, tetapi tidak yang lain !?

Mengubah API tidak berfungsi.
Pengaturan untuk semua huruf besar memerlukan min API 14 dan font masih diatur ulang ke 'normal'.

Itu karena Android Material Styles memaksakan perubahan ke gaya jika tidak ada yang terdefinisi (itu sebabnya ia bekerja di salah satu tata letak saya dan bukan yang lain karena saya mendefinisikan gaya).

Jadi perbaikan yang mudah adalah dengan menentukan gaya dalam manifes untuk setiap aktivitas yang dalam kasus saya hanya:
android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen"
(harap ini membantu seseorang, akan menyelamatkan saya beberapa jam semalam)


4
Itu adalah upaya yang sangat buruk, cukup buat gaya untuk tombol Anda, satu di nilai-21 yang memiliki semuaCaps palsu. Kembali ke tema yang lebih lama (di sini Tema Holo) membuat aplikasi Anda lebih jelek dan lebih tidak konsisten bagi pengguna.
bluewhile

2

Jika Anda menggunakan appcompat-v7, Anda bisa subkelasAppCompatButton dan setSupportAllCaps(false), lalu gunakan kelas ini untuk semua tombol Anda.

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

Lihat AppCompatButton # setSupportAllCaps (boolean) dokumen Android.


2

Secara default, Button di android menyediakan semua kata kunci caps. Jika Anda ingin teks tombol dalam huruf kecil atau huruf besar, Anda dapat menonaktifkan textAllCapsflag menggunakanandroid:textAllCaps="false"


0

Saya tidak tahu mengapa jawaban @ user1010160 mendapat peringkat 0. Saya akan memberi +1 jika saya memiliki reputasi yang cukup.

Karena aplikasi saya dirancang untuk API kurang dari 14 dan saya tidak ingin menambahkan kode ke program saya, saya tidak menemukan solusi sampai saya membaca jawabannya. Apa yang dia katakan adalah bahwa meskipun Anda telah melakukan apa yang diperlukan dalam gaya Aplikasi, itu tidak akan berfungsi kecuali jika Anda menambahkan gaya ke aktivitas Anda dan di sana Anda mengatur textAllCaps menjadi false.

Tidak cukup memiliki gaya untuk aktivitas (aktivitas saya memiliki gaya), karena gaya mungkin default ke properti AllCaps. Anda harus mengatur secara eksplisit, dalam aktivitas juga, properti itu menjadi false.

Saya sekarang memilikinya baik di Aplikasi dan di bagian Kegiatan file manifes.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.