ทำไมข้อความปุ่มของฉันถูกบังคับให้ CAPS ทั้งหมดบน Lollipop?


447

ในแอพของฉัน"Tide Now WA"ซึ่งฉันเพิ่งทดสอบความเข้ากันได้กับแท็บเล็ต Nexus 9 ใหม่ (Lollipop - API 21)

มันเขียนข้อความปุ่ม แอพนี้เขียนข้อความอย่างถูกต้องโดยใช้ Android 2.3 และ Android 4.0 เช่นตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก

เมื่อแอพเดียวกันทำงานบน Nexus 9 ตัวอักษรทั้งหมดในข้อความจะเป็นตัวพิมพ์ใหญ่

FWIW รายการของฉันมีคำสั่งต่อไปนี้:

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

ฉันสามารถแก้ไขได้ในรหัสของฉันหรือเป็นข้อบกพร่องในระบบปฏิบัติการขอบคุณ


คุณสามารถแบ่งปันรหัสได้อย่างไรคุณผสมตัวพิมพ์เล็กและตัวอักษรพิมพ์เล็ก
N Sharma

พวกเขาถูกกำหนดใน strings.xml ของฉันเช่น <string name = "r1s1"> Seattle </string>
user1644002

ใช่. 21. เร็วเกินไปที่จะพิมพ์ถูก ขออภัย
user1644002

23
ข้อความของปุ่มเป็นตัวพิมพ์ใหญ่โดยค่าเริ่มต้นเมื่อใช้ธีม Material (หรือ DeviceDefault with API 21+) สิ่งนี้ทำงานได้ตามที่ตั้งใจไว้
alanv

คำตอบ:


636

ฉันไม่รู้ว่าทำไมมันถึงเกิดขึ้น แต่มี 3 ครั้งเล็กน้อยที่จะทำ:

  1. ใช้android:textAllCaps="false"ในของคุณlayout-v21

  2. เปลี่ยนวิธีการแปลงของปุ่มโดยทางโปรแกรม mButton.setTransformationMethod(null);

  3. ตรวจสอบสไตล์ของคุณสำหรับ Allcaps

หมายเหตุ : public void setAllCaps(boolean allCaps), android:textAllCapsเป็นใช้ได้จาก API รุ่น 14


# 1 ไม่สร้างความแตกต่าง ไม่แน่ใจว่าจะทำอย่างไร # 3 ไม่มีสไตล์ใช่ไหม ตอนนี้ลอง # 2
user1644002

2
ใช่เพิ่มสิ่งนี้: btn [i] .setTransformationMethod (null); ทำให้มันใช้งานได้ขอบคุณ
user1644002

2
ฉันยอมรับคำตอบของ Nikola เป็นวิธีแก้ปัญหา แต่ต้องการชี้ให้เห็นอีกส่วนหนึ่งของคำถามคือ alanv จัดทำโดยผู้อธิบายเหตุผลในความคิดเห็นข้างต้น
user1644002

1
ทำงานให้ฉันด้วยเช่นกันใช้วิธีการเขียนโปรแกรมเนื่องจาก textAllCaps XML attr รองรับเฉพาะ API> 14. ขอบคุณ!
patrickjason91

3
ฉันใช้<item name="android:textAllCaps">false</item>คำจำกัดความสไตล์ของฉัน
บางคนอยู่ที่ไหนสักแห่ง

169

นี่คือสิ่งที่ฉันทำในค่า / themes.xml ของฉัน

    <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
สำหรับการ pre- API ระดับ 14 <item name="textAllCaps">false</item>การสนับสนุนคุณสามารถใช้
CommonsWare

สิ่งนี้ใช้ได้กับ Widget.AppCompat.Button เท่านั้น คำตอบทั่วไปจะได้รับจาก Ashish Chaugule ด้านล่างเช่นเพิ่ม <item name = "android: textAllCaps"> false </item> ให้กับธีม (แม้ว่าคำถามจะถูกถามโดยเฉพาะอย่างยิ่งสำหรับปุ่ม แต่ฉันคิดว่าถ้าไม่ต้องการใช้ปุ่มทั้งหมด แต่ก็ไม่ต้องการสำหรับเมนูรายการการกระทำ ฯลฯ )
user2808624

1
ไม่ได้ผลสำหรับฉัน กลายเป็นงานเมื่อฉันเปลี่ยนbuttonStyleเป็นandroid:buttonStyle
Vasily Kabunov

2
ใน XML android:textAllCaps="false"(ฉันใช้ android studio 3.0)
meyasir

107

สิ่งนี้สามารถแก้ไขได้ในรหัสแอปพลิเคชันโดยการตั้งค่าวิธีการแปลงของปุ่มเช่น

mButton.setTransformationMethod(null);

สำหรับ Kotlin ไวยากรณ์คือ: mButton.transformationMethod = null
Native_Mobile_Arch_Dev

66

ตั้งค่า android: textAllCaps = "false" หากคุณใช้รูปแบบ appcompat ตรวจสอบให้แน่ใจว่า textAllCaps มาก่อนสไตล์ มิฉะนั้นสไตล์จะแทนที่มัน ตัวอย่างเช่น:

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

ทำงานเหมือนมีเสน่ห์ แต่ในกรณีของฉันฉันต้องทำเช่น: <style name = "textAppearanceButton" parent = "@ android: style / TextAppearance.Material.Widget.Button"> <item name = "android: textAllCaps"> false < / item> </style>
Vfleitao

58

เพิ่มบรรทัดนี้อย่างมีสไตล์

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


52
ฉันไม่ทราบว่าทำไมพวกเขาถึงทำสิ่งนี้ผิด
เกล็นเมย์นาร์ด

5
นี่เป็นค่าเริ่มต้นในชุดรูปแบบของวัสดุเนื่องจากเหมาะสมกับลักษณะของการออกแบบวัสดุ
QAMAR

คนยากจนติดอยู่ในกล่องสี่เหลี่ยมของการออกแบบวัสดุ
eric

35

อันนี้ใช้งานได้ .... เพียงแค่ในรหัสของคุณในรหัสด้านล่างของคุณเพิ่มอันนี้:

android:textAllCaps="false"

ควรปิดการใช้ตัวอักษรตัวพิมพ์ใหญ่ที่ U พยายามพิมพ์ขนาดเล็ก


32

ค่าเริ่มต้นของอมยิ้มมาพร้อมกับ "textAllCaps true" ดังนั้นคุณต้องทำให้เป็นเท็จด้วยตนเอง


5
เป็นเรื่องที่น่ารู้ หากมีเว็บไซต์ที่แสดงรายการค่าเริ่มต้นเหล่านี้ทั้งหมดสำหรับ Android รุ่น?
อดัม


19

มีวิธีที่ง่ายกว่าสำหรับการทำงานกับปุ่มทั้งหมดเพียงแค่เปลี่ยนลักษณะที่ปรากฏของปุ่มในชุดรูปแบบของคุณลองสิ่งนี้:

ใน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: ขอแนะนำให้ปฏิบัติตามหลักการออกแบบวัสดุคุณควรแสดงข้อความตัวพิมพ์ใหญ่ในปุ่ม, http://www.google.com/design/spec/components/buttons.html


2
ฉันเห็นด้วยมันเป็นเรื่องที่ดีในการปฏิบัติตามแนวทางการออกแบบ ... จนกว่าข้อความปุ่มจะไม่เหมาะกับปุ่มอีกต่อไป
คนอยู่ที่ไหนสักแห่ง

google ควรหยุดพูดถึงสไตล์ - ฉันไม่รู้ว่ามีคนร้องไห้และร้องไห้สะอึกสะอื้นบนท้องถนนเพราะมีปุ่มเล็ก ๆ !
bharal

11

การใช้ android.support.v7.widget.AppCompatButton ในรูปแบบ XML จะช่วยให้คุณหลีกเลี่ยงการต้องใช้ layout-21 หรือเปลี่ยนแปลงอะไรโดยทางโปรแกรม โดยปกติสิ่งนี้จะทำงานกับไลบรารี 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"/>

หวังว่านี่จะช่วยได้


11

ใช้บรรทัดandroidนี้: textAllCaps = "false"ใน 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 คุณต้องคลิกไอคอนตัวกรองเพื่อแสดงคุณสมบัติของผู้เชี่ยวชาญ จากนั้นคุณจะเห็นtextAllCapsทรัพย์สิน ตรวจสอบจากนั้นยกเลิกการเลือก


9

คุณสามารถเพิ่มandroid:textAllCaps="false"ปุ่ม

ข้อความของปุ่มอาจเปลี่ยนเป็นตัวพิมพ์ใหญ่ตามธีมของแอปที่ใช้กับปุ่มทั้งหมด ตรวจสอบไฟล์รูปแบบ / android:textAllCapsรูปแบบสำหรับการตั้งค่าแอตทริบิวต์


9

Java:

yourButton.setAllCaps(false);

Kotlin:

yourButton.isAllCaps = false

XML:

android:textAllCaps="false"

รูปแบบ:

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

ในรูปแบบ:

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

4

หากคุณมาที่นี่เพราะข้อความปุ่ม Facebook ของคุณปรากฏในตัวพิมพ์ใหญ่ทั้งหมดให้เพิ่มลงandroid:textAllCaps="false"ในไฟล์ xml ของคุณ มันใช้งานได้สำหรับฉัน


2

ตกลงเพียงแค่วิ่งเข้าไปในนี้ ปุ่มใน Lollipop จะออกมาเป็นตัวพิมพ์ใหญ่ทั้งหมดและแบบอักษรจะรีเซ็ตเป็น 'ปกติ' แต่ในกรณีของฉัน (Android 5.02) มันทำงานในรูปแบบเดียวอย่างถูกต้อง แต่ไม่ใช่แบบอื่น!?

การเปลี่ยน API ไม่ทำงาน
การตั้งค่าเป็นตัวพิมพ์ใหญ่ทั้งหมดต้องใช้ขั้นต่ำ API 14 และแบบอักษรยังคงรีเซ็ตเป็น 'ปกติ'

เป็นเพราะสไตล์วัสดุ Android บังคับให้เปลี่ยนสไตล์หากไม่มีการกำหนดไว้ (นั่นคือเหตุผลที่ทำให้มันทำงานในหนึ่งในรูปแบบของฉันและไม่ได้อื่น ๆ เพราะฉันกำหนดสไตล์)

ดังนั้นการแก้ไขที่ง่ายคือการกำหนดสไตล์ในรายการสำหรับแต่ละกิจกรรมซึ่งในกรณีของฉันเป็นเพียง:
android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen"
(หวังว่านี่จะช่วยคนได้ช่วยฉันด้วย เมื่อคืนนี้)


4
นั่นเป็นความพยายามที่แย่มากเพียงแค่สร้างสไตล์ให้กับปุ่มของคุณหนึ่งในค่า -21 ที่มี allCaps เป็นเท็จ กลับไปใช้ชุดรูปแบบเก่า (นี่คือธีม Holo) ทำให้แอปของคุณน่าเกลียดและไม่สอดคล้องกับผู้ใช้มากขึ้น
bluewhile

2

หากคุณใช้appcompat-v7คุณสามารถคลาสย่อยAppCompatButtonและsetSupportAllCaps(false)จากนั้นใช้คลาสนี้สำหรับปุ่มทั้งหมดของคุณ

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

ดูAppCompatButton # setSupportAllCaps (boolean)เอกสาร Android


2

ตามค่าเริ่มต้นปุ่มใน Android จะให้คำหลักตัวพิมพ์ใหญ่ทั้งหมด หากคุณต้องการให้ข้อความของปุ่มเป็นตัวพิมพ์เล็กหรือตัวพิมพ์เล็กคุณสามารถปิดการใช้งานการtextAllCapsตั้งค่าสถานะได้android:textAllCaps="false"


0

ฉันไม่ทราบว่าทำไมคำตอบของ @ user1010160 มีคะแนนเป็น 0 ฉันจะให้ +1 ถ้าฉันมีชื่อเสียงเพียงพอ

เนื่องจากแอพของฉันถูกออกแบบมาสำหรับ API น้อยกว่า 14 และฉันไม่ต้องการเพิ่มรหัสในโปรแกรมของฉันฉันจึงไม่พบวิธีแก้ปัญหาจนกว่าฉันจะอ่านคำตอบของเขา สิ่งที่เขาพูดก็คือแม้ว่าคุณจะได้ทำสิ่งที่ต้องการในรูปแบบของแอปพลิเคชันมันจะไม่ทำงานจนกว่าคุณจะเพิ่มสไตล์ให้กับกิจกรรมของคุณและคุณตั้ง textAllCaps เป็นเท็จ

ไม่เพียงพอที่จะมีสไตล์สำหรับกิจกรรม (กิจกรรมของฉันมีสไตล์) เนื่องจากสไตล์อาจมีค่าเริ่มต้นเป็นคุณสมบัติ AllCaps คุณต้องกำหนดอย่างชัดเจนในกิจกรรมด้วยเช่นกันคุณสมบัตินั้นเป็นเท็จ

ตอนนี้ฉันมีทั้งในแอปพลิเคชันและในส่วนกิจกรรมของไฟล์รายการ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.