मेरे बटन पाठ को लॉलीपॉप पर सभी कैप्स के लिए क्यों मजबूर किया गया है?


447

मेरे ऐप में "टाइड नाउ वॉ" जो मैंने हाल ही में नए नेक्सस 9 टैबलेट (लॉलीपॉप - एपीआई 21) का उपयोग करके संगतता के लिए परीक्षण किया गया था।

यह कुछ बटन पाठ लिखता है। यह ऐप एंड्रॉइड 2.3 और एंड्रॉइड 4.0 का उपयोग करके सही तरीके से टेक्स्ट लिखता है। यानी मिश्रित पूंजी और निचले मामले पत्र।

जब मेरे नेक्सस 9 पर एक ही ऐप चलाया जाता है तो टेक्स्ट के सभी अक्षर कैपिटल में आ जाते हैं।

FWIW मेरी घोषणा में निम्नलिखित कथन शामिल हैं:

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

क्या मैं इसे अपने कोड में ठीक कर सकता हूं या यह OS धन्यवाद में एक बग है


क्या आप एक कोड साझा कर सकते हैं कि आपने कैपिटल और लोअर केस अक्षरों को कैसे मिलाया
एन शर्मा

वे मेरे तार में परिभाषित किए गए हैं। जैसे कि <string name = "r1s1"> सिएटल </ string>
user1644002

हाँ। 21. बहुत जल्दी सही टाइप करना। क्षमा करें
user1644002

23
सामग्री (या API 21+ के साथ DeviceDefault) का उपयोग करते समय बटन पाठ डिफ़ॉल्ट रूप से सभी-कैप होता है। यह इच्छानुसार काम कर रहा है।
एलन्व

जवाबों:


636

मुझे नहीं पता कि यह क्यों हो रहा है लेकिन बनाने के लिए 3 तुच्छ प्रयास हैं:

  1. android:textAllCaps="false"अपने में उपयोग करेंlayout-v21

  2. प्रोग्राम को बटन की परिवर्तन विधि बदल दें। mButton.setTransformationMethod(null);

  3. Allcaps के लिए अपनी शैली की जाँच करें

नोट : public void setAllCaps(boolean allCaps), android:textAllCapsकर रहे हैं उपलब्ध एपीआई संस्करण 14 से।


# 1 कोई फर्क नहीं पड़ा। यह सुनिश्चित नहीं है कि # 3 कैसे करें, कोई स्टाइल नहीं है? अब # 2 कोशिश कर रहा है।
user1644002

2
हां, इसे जोड़कर: btn [i] .setTransformationMethod (null); यह काम करता है धन्यवाद
user1644002

2
मैं निकोला के जवाब को समाधान के रूप में स्वीकार कर रहा हूं, लेकिन सवालों के दूसरे हिस्से को इंगित करना चाहता हूं, जैसा कि एलनव द्वारा प्रदान किया गया है, जिन्होंने ऊपर टिप्पणियों में क्यों समझाया।
14:16 बजे user1644002

1
मेरे लिए भी काम किया, क्योंकि textAllCaps XML attr केवल समर्थित एपीआई> 14. धन्यवाद से प्रोग्राम विधि का उपयोग किया है! धन्यवाद!
patrickjason91

3
मैंने <item name="android:textAllCaps">false</item>अपनी शैली की परिभाषा में प्रयोग किया है
कोई व्यक्ति

169

यहाँ मैंने अपने मूल्यों / थीमों में क्या किया है। 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
पूर्व-एपीआई स्तर 14 समर्थन के लिए, आप उपयोग कर सकते हैं <item name="textAllCaps">false</item>
कॉमन्सवेयर

यह केवल Widget.AppCompat.Button पर लागू होता है। आशीष चौगुले द्वारा अधिक सामान्य उत्तर नीचे दिया गया है, अर्थात सीधे <वस्तु का नाम = "android: textAllCaps"> विषय-शैली के लिए गलत </ आइटम>। (हालांकि सवाल मूल रूप से बटन के लिए विशेष रूप से पूछे गए थे, मुझे लगता है कि अगर ऑलैप्स बटन के लिए नहीं चाहते हैं, तो यह मेनू-आइटम, एक्शन आदि के लिए भी नहीं चाहिए)
user2808624

1
मेरे लिए काम नहीं किया। काम करने के लिए बन गया है जब मैं बदल buttonStyleकरने के लिएandroid:buttonStyle
वसीली Kabunov

2
एक्सएमएल में android:textAllCaps="false"(मैं एंड्रॉइड स्टूडियो 3.0 का उपयोग कर रहा हूं)
meyasir

107

यह बटन के ट्रांसफॉर्मेशन मैथोड को सेट करके एप्लिकेशन कोड में फिक्स करने योग्य है, जैसे

mButton.setTransformationMethod(null);

कोटलिन के लिए, वाक्य रचना है: 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"> <आइटम नाम = "android": textAllCaps "> false < / आइटम> </ शैली>
Vfleitao

58

इस पंक्ति को शैली में जोड़ें

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


52
मैं यह क्यों नहीं जानता कि वह क्या है
ग्लेन मेनार्ड

5
यह सामग्री विषय में डिफ़ॉल्ट है, क्योंकि यह सामग्री डिजाइन की प्रकृति के
अनुकूल है

गरीब लोग सामग्री डिजाइन के वर्ग बॉक्स में फंस गए
eric

35

यह एक काम कर रहा है .... बस अपने कोड में अपने निचले कोड में इस एक को जोड़ें:

android:textAllCaps="false"

यह उन छोटे अक्षरों को निष्क्रिय करना चाहिए जो U छोटे टाइप करने की कोशिश कर रहा है।


32

लॉलीपॉप डिफ़ॉल्ट "textAllCaps true" के साथ आता है, इसलिए आपको मैन्युअल रूप से इसे गलत करना होगा


5
यह जानकर बहुत अच्छा लगा। यदि कोई ऐसी साइट है जो प्रति Android संस्करण इन सभी डिफ़ॉल्ट मानों को सूचीबद्ध करती है?
एडम


19

एक आसान तरीका है जो सभी बटनों के लिए काम करता है, बस अपने विषय में बटनों की उपस्थिति बदलें, यह प्रयास करें:

में मान-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>

पुनश्च: सामग्री डिजाइन के सिद्धांतों का पालन करने की सिफारिश की गई है, आपको बटन में पूंजीकृत पाठ दिखाना चाहिए, http://www.google.com/design/spec/compenders/buttons.html


2
मैं सहमत हूं, डिजाइन दिशानिर्देशों का पालन करना बहुत अच्छा है ... जब तक कि बटन पाठ अब बटन में फिट नहीं होता है
कोई कहीं

Google को शैलियों के बारे में बात करना बंद कर देना चाहिए - मुझे नहीं पता था कि निचले पायदानों की वजह से गलियों में रोना-पीटना और रोना-धोना मचा था!
बोरल

11

XML लेआउट में android.support.v7.widget.AppCompatButton का उपयोग करने से आपको लेआउट -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 = अपने 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

एंड्रॉइड स्टूडियो आईडीई में, आपको विशेषज्ञ गुणों को दिखाने के लिए फ़िल्टर आइकन पर क्लिक करना होगा। तब आपको textAllCapsसंपत्ति दिखाई देगी । इसे जांचें, फिर इसे अनचेक करें।


9

आप android:textAllCaps="false"बटन को जोड़ सकते हैं ।

बटन टेक्स्ट आपके ऐप के थीम द्वारा अपरकेस में बदला जा सकता है जो सभी बटन पर लागू होता है। विशेषता सेट करने के लिए थीम / शैलियों फ़ाइलों की जाँच करें android:textAllCaps


9

जावा:

yourButton.setAllCaps(false);

Kotlin:

yourButton.isAllCaps = false

एक्सएमएल:

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

यदि आप यहाँ आ चुके हैं क्योंकि आपका फेसबुक बटन टेक्स्ट सभी कैप्स में दिखाई देता है, तो बस इसे android:textAllCaps="false"अपने xml फ़ाइल में जोड़ें । इसने मेरे लिए काम किया।


2

ठीक है, बस इस में भाग गया। लॉलीपॉप में बटन सभी अपरकेस और फ़ॉन्ट 'सामान्य' के लिए बाहर आते हैं। लेकिन मेरे मामले में (एंड्रॉइड 5.02) यह एक लेआउट में सही ढंग से काम कर रहा था, लेकिन दूसरे में नहीं! "

एपीआई बदलने से काम नहीं चला।
सभी कैप्स पर सेट करने के लिए न्यूनतम API 14 की आवश्यकता होती है और फ़ॉन्ट अभी भी 'सामान्य' तक रहता है।

ऐसा इसलिए है क्योंकि एंड्रॉइड मटेरियल स्टाइल्स शैलियों को बदलने के लिए मजबूर करता है यदि कोई परिभाषित नहीं है (इसीलिए यह मेरे एक लेआउट में काम करता है और दूसरा नहीं क्योंकि मैंने एक शैली को परिभाषित किया है)।

इसलिए यह आसान तरीका है कि प्रत्येक गतिविधि के लिए एक शैली को परिभाषित करना है जो मेरे मामले में थी:
Android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen"
(आशा है कि यह किसी की मदद करता है, मुझे एक जोड़े को बचा लेगा) कल रात)


4
यह एक बहुत बुरा प्रयास है, बस अपने बटनों के लिए शैलियों का निर्माण करें, एक मान -21 में, जिसमें सभी झूठी हैं। पुराने विषय पर वापस आना (यहाँ एक Holo Theme) उपयोगकर्ता के लिए आपके ऐप को बदसूरत और अधिक असंगत बना देता है।
ब्लूव्हेल

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 (बुलियन) एंड्रॉयड डॉक्स।


2

डिफ़ॉल्ट रूप से, Android में बटन सभी कैप्स कीवर्ड प्रदान करता है। यदि आप चाहते हैं कि बटन टेक्स्ट लोअर केस या मिश्रित केस में हो तो आप textAllCapsफ्लैग को अक्षम कर सकते हैंandroid:textAllCaps="false"


0

मुझे नहीं पता कि @ user1010160 के उत्तर को 0 की रेटिंग क्यों मिली है। यदि मेरे पास पर्याप्त प्रतिष्ठा होती तो मैं इसे +1 कर देता।

चूंकि मेरा ऐप 14 से कम एपीआई के लिए डिज़ाइन किया गया है और मैं अपने प्रोग्राम में कोड नहीं जोड़ना चाहता था, मुझे कोई हल नहीं मिला जब तक कि मैं उसका जवाब नहीं पढ़ता। उन्होंने जो कहा, वह यह था कि भले ही आपने आवेदन शैलियों में क्या किया हो, यह तब तक काम नहीं करेगा जब तक आप अपनी गतिविधि में एक शैली नहीं जोड़ते हैं और वहां आप टेक्स्टएपलैक्स को गलत पर सेट करते हैं।

यह गतिविधि के लिए एक शैली के लिए पर्याप्त नहीं है (मेरी गतिविधि में एक शैली थी), क्योंकि शैली ऑलकैप संपत्ति के लिए चूक हो सकती है। आपको स्पष्ट रूप से, गतिविधि में, उस संपत्ति को असत्य पर सेट करना होगा।

अब मेरे पास एप्लिकेशन और मैनिफ़ेस्ट फ़ाइल के गतिविधि भागों में दोनों हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.