Android चयनकर्ता और पाठ का रंग


183

मैं एक साधारण चाहते TextViewतरह से व्यवहार करने के लिए simple_list_item_1एक में ListViewकरता है। यहाँ XML है:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:layout_width="fill_parent"
    android:gravity="center" android:focusable="true"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:background="@android:drawable/list_selector_background" />

पाठ रंग को छोड़कर सब कुछ काम करता है जो (उम्मीद के मुताबिक) केंद्रित स्थिति में नहीं बदलता है। मैं इसे कैसे बदलूं textAppearanceLargeInverse?


मामले में किसी को भी xml फ़ाइल की तलाश है, तो यह यहाँ है: developer.android.com/resources/samples/Home/res/color/…
swinefeaster

जवाबों:


401

मैंने एक बार काम करने तक कई परीक्षण किए, इसलिए: res / color / button_dark_text.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:color="#000000" /> <!-- pressed -->
     <item android:state_focused="true"
           android:color="#000000" /> <!-- focused -->
     <item android:color="#FFFFFF" /> <!-- default -->
 </selector>

रेस / लेआउट / view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
    <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="EXIT"
       android:textColor="@color/button_dark_text" />
</LinearLayout>

8
एंड्रॉइड के बिना: इस चयनकर्ता xml के साथ
ड्रा करने

4
@neufuture: आपको उपयोग करने की आवश्यकता हैandroid:textColor="@color/button_dark_text"
पॉल

3
रंग राज्य सूचियों का वर्णन करने वाला एक दस्तावेज़ है: developer.android.com/guide/topics/resources/…
Rick77

जिज्ञासा के रूप में, यह तब भी काम करता है जब सूची आइटम के लिए पाठ, बटन या किसी भी आइटम को सक्रिय किया गया है, जैसे। <आइटम Android: state_activated = "सही" Android: color = "@ android: color / white" />
jiahao

क्या चयनकर्ता को वास्तव में res/colorफ़ोल्डर में रहना चाहिए ?
mr5

79

और चयनकर्ता यहाँ भी उत्तर है।

स्रोतों में bright_text_dark_focused.xml खोजें, अपने प्रोजेक्ट को Res / color directory में जोड़ें और फिर TextView से देखें

android:textColor="@color/bright_text_dark_focused"

5
मुझे लगता है कि यह "प्राथमिक_टेक्स्ट_डार्क_फोकसड.एक्सएमएल" में बदल गया है।
greg7gkb

11
इसने मेरे दिमाग को उड़ा दिया। मैं इस समय पाठ का रंग बदलने के लिए श्रोताओं के साथ चीजों को संभाल रहा हूं। फर्श पर जबड़ा। प्रतिभाशाली!
आर्टेम रसाकोवस्की

कभी नहीं सोचा था कि चयनकर्ता भी टेक्स्टकॉलर के लिए काम करते हैं, सुपर आसान।
Drejc

मैंने इसे एक दृश्य के मूल लेआउट के साथ आज़माया, जो मैंने अपने लिए बनाया था ListFragment, और त्रुटियों का एक गुच्छा के साथ समाप्त हुआ । मैं क्या गलत कर रहा हूं?
मोवडाउन जो

जब हम Ctrl + स्पेस दबाते हैं तो हम @android: color / white का उपयोग नहीं कर सकते हैं .. उपलब्ध सामग्री की सहायता प्रदर्शित नहीं करता है
LOG_TAG

31

यहां मेरा कार्यान्वयन है, जो सूची में आइटम के रूप में बिल्कुल व्यवहार करता है (कम से कम 2.3 पर)

रेस / लेआउट / list_video_footer.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/list_video_footer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:drawable/list_selector_background"
        android:clickable="true"
        android:gravity="center"
        android:minHeight="98px"
        android:text="@string/more"
        android:textColor="@color/bright_text_dark_focused"
        android:textSize="18dp"
        android:textStyle="bold" />

</FrameLayout>

रेस / रंग / bright_text_dark_focused.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:color="#444"/>
    <item android:state_focused="true" android:color="#444"/>
    <item android:state_pressed="true" android:color="#444"/>
    <item android:color="#ccc"/>

</selector>

यह मेरे लिए अच्छी तरह से काम करता है, और मेरे मामले में मेरे TabHost कार्यान्वयन के लिए हाइलाइट किए गए / अनहेल्दी रंगों को समायोजित करने के लिए काफी अच्छा काम किया है
विषम राशि

27

एक सूची दृश्य में चयन पर इसे काम करने के लिए निम्नलिखित कोड का उपयोग करें:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fff"/>
    <item android:state_activated="true" android:color="#fff"/>
    <item android:color="#000" />
</selector>

स्पष्ट रूप से कुंजी state_activated="true"राज्य है।


17
इस फाइल को Res / color folder
Nguyen Minh Binh

4

यहाँ चयनकर्ता का उदाहरण दिया गया है। यदि आप ग्रहण का उपयोग करते हैं, तो यह कुछ सुझाव नहीं देता है जब आप ctrl और स्पेस दोनों पर क्लिक करते हैं: / आपको इसे टाइप करना होगा।

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_default_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/btn_default_selected"
    android:state_focused="true"
    android:state_enabled="true"
    android:state_window_focused="true"  />
<item android:drawable="@drawable/btn_default_normal" />

आप संदर्भ के लिए देख सकते हैं;

http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList


2

मैंने हमेशा इसके बाद अधिक खोज किए बिना उपरोक्त समाधान का उपयोग किया। ;-)

हालाँकि, आज मुझे कुछ समझ में आया और मैंने इसे साझा करने के बारे में सोचा। :)

यह सुविधा वास्तव में API 1 से उपलब्ध है और इसे ColorStateList कहा जाता है , जहाँ हम विभिन्न राज्यों के विजेट को रंग प्रदान कर सकते हैं (जैसा कि हम पहले से जानते हैं)।

यह भी बहुत अच्छी तरह से प्रलेखित है, यहाँ।


2

में res/colorजगह एक फ़ाइल "text_selector.xml":

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/blue" android:state_focused="true" />
    <item android:color="@color/blue" android:state_selected="true" />
    <item android:color="@color/green" />
</selector>

फिर TextViewइसका उपयोग करें:

<TextView
    android:id="@+id/value_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Text"
    android:textColor="@color/text_selector"
    android:textSize="15sp"
    />

और कोड में आपको एक क्लिक श्रोता सेट करने की आवश्यकता होगी।

private var isPressed = false

private fun TextView.setListener() {
    this.setOnClickListener { v ->
        run {
            if (isPressed) {
                v.isSelected = false
                v.clearFocus()
            } else {
                v.isSelected = true
                v.requestFocus()
            }
            isPressed = !isPressed
        }
    }
}

override fun onResume() {
    super.onResume()
    textView.setListener()
}

override fun onPause() {
    textView.setOnClickListener(null)
    super.onPause()
}

क्षमा करें यदि त्रुटियां हैं, तो मैंने प्रकाशन से पहले एक कोड बदल दिया और जांच नहीं की।


1

यदि टैब्स में टैक्स्ट व्यू का उपयोग करते हुए इस चयनकर्ता परिभाषा ने मेरे लिए काम किया (क्लॉस बाल्डिनो की कोशिश की, लेकिन ऐसा नहीं किया गया):

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <!--  Active tab -->
  <item
    android:state_selected="true"
    android:state_focused="false"
    android:state_pressed="false"
    android:color="#000000" />

  <!--  Inactive tab -->
  <item
    android:state_selected="false"
    android:state_focused="false"
    android:state_pressed="false"
    android:color="#FFFFFF" />

</selector>

0

क्या आपने कोशिश की है setOnFocusChangeListener? हैंडलर के भीतर, आप टेक्स्ट उपस्थिति बदल सकते हैं।

उदाहरण के लिए:

TextView text = (TextView)findViewById(R.id.text);
text.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            ((TextView)v).setXXXX();
        } else {
            ((TextView)v).setXXXX();
        }
    }
});

इसके बाद आप जो भी बदलाव चाहते हैं, उस पर ध्यान केंद्रित कर सकते हैं या नहीं। वैश्विक फोकस परिवर्तनों को सुनने के लिए आप ViewTreeObserver का भी उपयोग कर सकते हैं।

उदाहरण के लिए:

View all = findViewById(R.id.id_of_top_level_view_on_layout);
ViewTreeObserver vto = all.getViewTreeObserver();
vto.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
    public void onGlobalFocusChanged(
        View oldFocus, View newFocus) {
        // xxxx
    }
});

मुझे उम्मीद है कि यह आपको मदद करता है या आपको विचार देता है।


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