Android अनुकूलित बटन; पाठ का रंग बदलना


251

मैंने एक बटन बनाया जो विभिन्न राज्यों की पृष्ठभूमि को इस तरह से बदलता है:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true" android:drawable="@drawable/btn_location_pressed" /> <!-- pressed -->
 <item android:state_focused="true" android:drawable="@drawable/btn_location_pressed"/> <!-- focused -->
 <item android:drawable="@drawable/btn_location"/> <!-- default -->

यहाँ समस्या यह है कि मैं भी textColor को बदलने की कोशिश कर रहा हूँ जैसा कि मैं ड्रा करने योग्य के साथ करता हूँ लेकिन मैं नहीं कर पा रहा हूँ। मैंने पहले से ही एंड्रॉइड की कोशिश की: textColor और android: color, लेकिन पहला काम नहीं करता है जबकि सेकंड मेरी पृष्ठभूमि बदलता है।

अगला कोड मेरे लेआउट का हिस्सा है। पाठ रंग के संबंध में यह केवल सामान्य अवस्था के पाठ रंग के लिए काम करता है, इस प्रकार दबाए जाने पर इसे सफेद में नहीं बदलना चाहिए

<Button android:id="@+id/location_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:background="@drawable/location"          
        android:textSize="15sp"
        android:textColor="@color/location_color"
        android:textColorHighlight="#FFFFFF"
   />

क्या किसी का सुराग मिला है?

जवाबों:


580

अपने बटन के लिए एक स्टेटफुल कलर बनाएं, जैसे आपने बैकग्राउंड के लिए किया था, उदाहरण के लिए:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Focused and not pressed -->
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:color="#ffffff" />

    <!-- Focused and pressed -->
    <item android:state_focused="true" 
          android:state_pressed="true" 
          android:color="#000000" />

    <!-- Unfocused and pressed -->
    <item android:state_focused="false" 
          android:state_pressed="true" 
          android:color="#000000" />

    <!-- Default color -->
    <item android:color="#ffffff" />

</selector>

फ़ाइल को xml को res / drawable folder अर्थात res / drawable / button_text_color.xml पर रखें। इसके बाद ड्रॉबल को टेक्स्ट कलर के रूप में सेट करें:

android:textColor="@drawable/button_text_color"

15
ध्यान दें कि (मेरे लिए, कम से कम) एक बग है जहां "सामान्य" स्थिति (<आइटम एंड्रॉइड: रंग = "# ffffff" /> आपके उत्तर में) फ़ाइल के अंत में आपके उत्तर के रूप में रखा जाना चाहिए। फ़ाइल के शीर्ष पर (अन्य राज्यों के ऊपर) सामान्य स्थिति रखने से चयनकर्ता को काम करने से रोकता है।
क्रिस ब्लंट

58
यह एक बग नहीं है। यह राज्य के चयन का तरीका है। यह सबसे अच्छा मैच नहीं है , इसके बजाय पहला फिट जो इसे बनाएगा।
सुपरजोस

क्या आप इसे पूर्णांक मान के साथ कैसे करते हैं? मैं पाठ पैडिंग के साथ भी कुछ ऐसा ही करने की कोशिश कर रहा हूं।
इलीमेक्स

कुछ समय के लिए यह कोई फायदा नहीं हुआ कोशिश की, तो पता चला कि मैं अभी भी यह textcolor संपत्ति के बजाय पृष्ठभूमि संपत्ति के लिए स्थापित किया गया था। Textcolor को देखने के लिए उपयोग करने योग्य नहीं है!
ओडेम

20
यदि रंग चयनकर्ता res/colorफ़ोल्डर में स्थित है तो यह दांव लगाता है । और जब कॉल करें, उपयोग करें:android:textColor="@color/button_text_color"
जस्टिन

16

इसे करने का दूसरा तरीका आपकी कक्षा में है:

import android.graphics.Color; // add to top of class  

Button btn = (Button)findViewById(R.id.btn);

// set button text colour to be blue
btn.setTextColor(Color.parseColor("blue"));

// set button text colour to be red
btn.setTextColor(Color.parseColor("#FF0000"));

// set button text color to be a color from your resources (could be strings.xml)
btn.setTextColor(getResources().getColor(R.color.yourColor));

// set button background colour to be green
btn.setBackgroundColor(Color.GREEN);

1
यह बटन पर पाठ का रंग बदल देगा, लेकिन बटन के विभिन्न राज्यों (जैसे दबाया गया) के दौरान उस रंग पर रहेगा। ज्यादातर स्थितियों में, जब एक बटन की पृष्ठभूमि का रंग बदल जाता है, तो बटन के टेक्स्ट के रंग को बदलने के लिए भी वांछित होता है, यह वह जगह है जहां @Konstantin Burov का जवाब काम आता है।
दजुनैयट

1
यह मूल प्रश्न का उत्तर नहीं देता है। सवाल यह है कि राज्य आधारित रंगों को टेक्स्ट व्यू में कैसे परिभाषित किया जाए, जैसे आप राज्य आधारित ड्रॉब सेट कर सकते हैं।
रसायनशास्त्री

4

ठीक बहुत ही सरल पहले 1 पर जाएँ। res-valuse और open color.xml 2.copy 1 परिभाषित पाठ के 1 उदाहरण के लिए उनके # FF4081 और उदाहरण के लिए नाम बदलकर मैं सफेद में बदल गया और उदाहरण के लिए इसका मान बदलकर मैं #FFFFFF में बदल गया इस तरह सफेद मूल्य

<color name="White">#FFFFFF</color>

फिर अपने बटन के अंदर इस लाइन को जोड़ें

 b3.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.White));

ok b3 मेरे बटन का नाम है इसलिए उर बटन का नाम बदल दिया गया है तो अन्य सभी समान होंगे यदि आप सफेद रंग का उपयोग करते हैं यदि आप अलग-अलग रंग बदलते हैं तो अपने रंग के नाम के लिए सफेद रंग बदल दें लेकिन पहले आपने उस रंग को रंगों में परिभाषित किया है। xml जैसे मैंने pont 2 में समझाया


1

बटन का टेक्स्ट रंग बदलना

क्योंकि यह विधि अब पदावनत हो गई है

button.setTextColor(getResources().getColor(R.color.your_color));

मैं निम्नलिखित का उपयोग करता हूं:

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));

0

getColorStateListइस तरह का उपयोग करें

setTextColor(resources.getColorStateList(R.color.button_states_color))

के बजाय getColor

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