एंड्रॉइड: सूची दृश्य पर हाइलाइट अक्षम करना क्लिक करें


302

मैं एक सूची दृश्य पंक्ति को छूने पर होने वाले नारंगी हाइलाइट को अक्षम करना चाहता हूं। अब तक मेरे xml में मैंने निम्नलिखित कोशिश की है:

android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"

अधिक जानकारी: मैं चाहता हूं कि शून्य अंतर हो जब कोई उपयोगकर्ता इस सूची दृश्य वस्तु पर स्क्रीन को छूता है।

जवाबों:


674

इसे अपने xml में जोड़ें:

android:listSelector="@android:color/transparent"

और समस्या के लिए यह काम कर सकता है (मुझे यकीन नहीं है और मुझे नहीं पता कि क्या बेहतर समाधान हैं):

आप अपने TextView में एक ColorStateList लागू कर सकते हैं ।


2
यदि पारदर्शी अभी भी चयन को थोड़ा कम करता है, तो शायद यह पूरी तरह से पारदर्शी नहीं है। इसके बजाय # 00000000 आज़माएं, यह पूरी तरह से अदृश्य है।
Ridcully

मेरे लिए सही समाधान। मैंने लेआउट के आसपास के सूचियों की पृष्ठभूमि के लिए एक पारदर्शी चयनकर्ता एक्सएमएल को आकर्षित करने की कोशिश की है, लेकिन यह आईसीएस उपकरणों पर नारंगी पट्टी के लिए अग्रणी है।
मार्कस रुडेल

@RoflcoptrException मैं Fragmentसूची के लिए उपयोग करता हूं । XML लेआउट में एक LinearLayoutऔर कई TextViewआइटम हैं। मुझे पंक्ति हाइलाइट को कहां अक्षम करना चाहिए, कृपया?
JJD

40
Java Code से, आप कर सकते हैंlistView.setSelector(android.R.color.transparent);
sulai

@RoflcoptrException -> "आप अपने TextView में एक ColorStateList लागू कर सकते हैं" - यह एक अच्छा विकल्प है, अगर सूची पंक्तियाँ क्लिक करने योग्य नहीं हैं। जैसे ही टेक्स्टव्यू क्लिक करने योग्य होता है, सूची का ऑनक्लिक ईवेंट स्वयं फायर नहीं करेगा।
सेबस्टियन होजस

189

RoflcoptrException के उत्तर को ट्रिक करना चाहिए, लेकिन किसी कारण से यह मेरे लिए काम नहीं करता है, इसलिए मैं उस समाधान को पोस्ट कर रहा हूं जिसने मेरे लिए काम किया, आशा है कि यह किसी की मदद करता है

<ListView 
android:listSelector="@android:color/transparent" 
android:cacheColorHint="@android:color/transparent"
/>

101

नारंगी हाइलाइट प्रभाव सूची दृश्य पर एक शैली हैयह आलेख सूची दृश्य शैली को ओवरराइड करने का एक अच्छा अवलोकन देता है।

अनिवार्य रूप से, आपके पास एक चयनकर्ता है जो वर्तमान स्थिति के आधार पर विभिन्न शैली तत्वों को निर्दिष्ट करता है।

इसे संक्षिप्त और त्वरित समाधान के लिए देखें https://stackoverflow.com/a/12242564/185022


क्या यह विधि मुझे प्रत्येक listView ऑब्जेक्ट के लिए एक अलग शैली रखने की अनुमति देगा? इसके अलावा, क्या यह संभव है कि मैं सेबी के जवाब में लाए गए मुद्दे से बचूं?
जॉन मोफिट

1
हां, आप किसी भी शैली विशेषताओं को ओवरराइड कर सकते हैं। आप विशेष रूप से प्रत्येक सूची दृश्य में शैली का उपयोग करके एक शैली निर्दिष्ट कर सकते हैं = "@ शैली / MyStyle" विशेषता जैसा कि पहले लिंक में वर्णित है।
चेरिल साइमन

मुझे खेद है लेकिन इसका जवाब नहीं होना चाहिए। listSelectorइसे बदलना चाहिए।
अयमान सलाह

63

से ListView: अक्षम फोकस हाइलाइट ,

जब आप अपना ListAdapterउपयोग निम्नलिखित कोड सेट करते हैं

ListAdapter adapter = new SimpleCursorAdapter(MyList, Layout, c, 
                new String[] { "Name", "Score" }, to) 
{ 
    public boolean areAllItemsEnabled() 
    { 
        return false; 
    } 
    public boolean isEnabled(int position) 
    { 
        return false; 
    } 
}; 

इससे BaseAdapterक्लास ओवरराइड हो जाएगी । यह कोशिकाओं के बीच की सफेद सीमा को भी रद्द करता है।


4
अमान्य, वह आइटम के लिए चयन व्यवहार अक्षम कर दिया गया है (OnItemClitten आग नहीं देगा)
सैंडर

6
यह एक अच्छा समाधान है क्योंकि एक सूची आइटम को हाइलाइट किया गया है या नहीं यह एक सौंदर्यवादी की तुलना में व्यवहार का मुद्दा है। तो, आप इसका उपयोग उन साक्षात्कारों के लिए कर सकते हैं जिन्हें आप चयन योग्य होने की संपत्ति नहीं चाहते हैं। एक वैश्विक शैली वास्तव में समझ में नहीं आती है, क्योंकि आप जानते हैं कि आप अंततः एक ऐसी सूची चाहते हैं जो चयनित हो सकती है, और मेरे लिए व्यवहार के लिए शैलियों का उपयोग करना गलत लगता है। उनका अर्थ अर्थ नहीं होना चाहिए, केवल सौंदर्यवादी होना चाहिए। चयन की संपत्ति एक अर्थपूर्ण चीज है।
थॉमस डिगन

इसके अलावा यह इस प्रश्न का उत्तर नहीं है, isEnabledकिसी आइटम को अक्षम करने के लिए ओवरराइड करना इसे अक्षम करने का तरीका नहीं है! दस्तावेज़ीकरण कहता है कि isEnabledयह निर्धारित करना है कि क्या एक आइटम एक विभाजक है।
बख्शी

39

यह भी जोड़ने के लिए XMse साथ listselector..नहीं यह काम करेगा

<ListView
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"/> 

2
बहुत धन्यवाद। मैं उस समस्या को हल करना चाहता हूं जब स्क्रॉल करने पर पूरी लिस्ट व्यू हाईलाइट (मेरे मामले में सफेद रंग) हो जाती है (केवल एंड्रॉइड 2.3 से पहले होता है)। और यह काम करता है।
येंग

"# 00000000" और "@ थायरॉयड: रंग / पारदर्शी" किस तरह की विविधता के लिए?
एंड्रॉइड

2011 में @Androider ya मैं लोगों को यह दोनों तरीके से काम करने की जानकारी दे रहा था ... निश्चित रूप से आज आपको # 000000
शीतल

32

यदि आप उपयोग कर रहे हैं ArrayAdapterया BaseAdapterसूची वस्तुओं को आबाद करने के लिए। विधि और बदले ।OverrideisEnabledfalse

 @Override
  public boolean isEnabled (int position) {
    return false;
  }

13

आभासी और वास्तविक उपकरणों पर कुछ 'google'ing और परीक्षण करने के बाद, मैं अपने नीचे दिए गए कोड कार्यों पर ध्यान देता हूं:

ArrayAdapter<String> myList = new ArrayAdapter<String>(this, R.layout.list_item, strText) {
    public boolean isEnabled(int position) 
    { 
            return false; 
    } 
};

ध्यान दें कि मैंने areAllItemsEnabled()भाग छोड़ दिया है ।


यह मेरे लिए काम किया। हालाँकि, क्या इसका मतलब यह नहीं है कि अगर उन पंक्तियों के लिए एक दायीं है जो विकलांग अवस्था है, तो इससे उनकी छवि भी बदल जाएगी? क्या क्लिक को अक्षम करना संभव है और फिर भी ड्रा करने योग्य नहीं बदला जा सकता है?
Android डेवलपर 12

1
इसका एक साइड इफेक्ट है, जिससे ListView डिवाइडर को नहीं दिखा सकता है।
मैकिज पिगुलस्की

11

इससे मुझे कुछ भी मदद नहीं मिलती:

transparent_drawable.xml:

<?xml version="1.0" encoding="utf-8"?>    
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00000000"/>
</shape>

layout.xml:

android:listSelector="@drawable/transparent_drawable"

7

कोड में

listView.setSelector(getResources().getDrawable(R.drawable.transparent));

और drawable फ़ोल्डर में छोटी पारदर्शी छवि जोड़ें।

जैसे: पारदर्शी। xml

<?xml version="1.0" encoding="utf-8"?>    
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00000000"/>
</shape>

5

मेरे android:focusableInTouchMode="true"लिए जाने का रास्ता है। android:listSelector="@android:color/transparent" कोई फायदा नहीं है। ध्यान दें कि मैं प्रत्येक पंक्ति में कई वस्तुओं के साथ एक कस्टम सूची का उपयोग कर रहा हूं।



5

विकल्प के रूप में:

listView.setSelector(android.R.color.transparent);

या

listView.setSelector(new StateListDrawable());

1

ऐसा करने का तेज़ और आसान तरीका है: विधि:

private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    //TODO
    ((ListView)sender).SelectedItem = null;
}

आशा है कि यह मदद करेगा;)


यह ग # नहीं जावा
एंथनी

मुझे लगता है कि अधिकांश एंड्रॉइड प्रोग्रामर अभी भी जावा का उपयोग कर रहे हैं, क्योंकि वह है जो एंड्रॉइड स्टूडियो का समर्थन करता है, लेकिन सी # का उपयोग किया जा सकता है। मैं सिर्फ यह स्पष्ट करना चाहता हूं कि यह सी #: डी
एंथनी

0

यदि आप किसी एकल सूची दृश्य आइटम के लिए हाइलाइट को अक्षम करना चाहते हैं, लेकिन सेल सक्षम रखें, तो हाइलाइटिंग को अक्षम करने के लिए उस सेल के लिए पृष्ठभूमि का रंग सेट करें।

उदाहरण के लिए, अपने सेल लेआउट में, सेट करें android:background="@color/white"


0

आप बस वही प्राप्त कर सकते हैं posजो आपको मिलता है onItemClick और करते हैं:

listView.setItemChecked(pos, false);

मुझे पता है कि सबसे अच्छा तरीका है

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