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

pengguna1644002
sumber
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.

Nikola Despotoski
sumber
# 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>
miguel
sumber
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);
pengguna1644002
sumber
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"
Bob bobbington
sumber
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>

Chaishule Ashish
sumber
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.

parsa sarshar
sumber
32

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

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

Tambahkan android: textAllCaps = "false" di <Button>tag itu saja.

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

pedroca
sumber
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.

pengguna2288580
sumber
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"
           />
Abdul Basit Rishi
sumber
9

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

wisbucky
sumber
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.

chakri Reddy
sumber
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"
      .
      .
   />
Amir Hossein Ghasemi
sumber
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.

Perkasa
sumber
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)

pengguna1010160
sumber
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.

hidro
sumber
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"

Reyaz Ahmad
sumber
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.

Zvi
sumber
0

Alternatif Kotlin terprogram lainnya:

mButton.transformationMethod = null

Native_Mobile_Arch_Dev
sumber