Android में listView आइटम के बीच स्थान कैसे सेट करें


371

मैंने listView आइटम के बीच जगह बनाने के लिए listView पर मार्जिनबॉटम का उपयोग करने की कोशिश की, लेकिन फिर भी आइटम एक साथ जुड़े हुए हैं।

क्या यह भी संभव है? यदि हाँ, तो क्या ऐसा करने का कोई विशिष्ट तरीका है?

मेरा कोड नीचे है

<LinearLayout
android:id="@+id/alarm_occurences"
android:layout_width="fill_parent" 
android:orientation="vertical"
android:layout_height="fill_parent"
android:background="#EEEEFF"
xmlns:android="http://schemas.android.com/apk/res/android">

<ListView
android:id="@+id/occurences"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>

मेरा कस्टम सूची आइटम:

<com.android.alarm.listItems.AlarmListItem
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" 
android:background="@drawable/alarm_item_background"
android:layout_marginBottom="10dp"    
>
<CheckedTextView     
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:textSize="20sp"
    android:textStyle="bold"
    android:typeface="serif"
    android:padding="10dp"

/>

</com.android.alarm.listItems.AlarmListItem>

मैं इस मामले में सूची आइटम के बीच अंतर कैसे बना सकता हूं?

जवाबों:


829

@ असही ने सिर पर कील ठोक दी, लेकिन मैं बस किसी के लिए थोड़ा सा एक्सएमएल जोड़ना चाहता था, जो शायद यहां से होकर आपके घर तक पहुंच जाए:

<ListView android:id="@+id/MyListView"
  android:layout_height="match_parent"
  android:layout_width="match_parent"
  android:divider="@android:color/transparent"
  android:dividerHeight="10.0sp"/>

किसी कारण से, मान जैसे "10", "10.0", और "10sp" सभी को dividerHeightमान के लिए Android द्वारा अस्वीकार कर दिया जाता है । यह एक फ्लोटिंग पॉइंट नंबर और एक यूनिट चाहता है, जैसे कि "10.0sp"। @Goofyahead नोट के रूप में, आप इस मूल्य के लिए डिस्प्ले-स्वतंत्र पिक्सेल का भी उपयोग कर सकते हैं (जैसे, "10dp")।


24
यह मदद नहीं करता है अगर आप इसे बिना खींचकर एक डिवाइडर दिखाना चाहते हैं
सोज़र्न

4
FYI करें - कोड के माध्यम से किया जा सकता है - getListView ()। SetDividerHeight (10)
AnhSirk Dasarp

2
या Android: विभक्त = "@ नल"
केविन

अगर मैं कुछ इस तरह से कुछ करने की जरूरत है @Sojurn मैं एक 9 पैच की कोशिश की है।
सूफियान

@ मेरे उत्तर की जाँच करें । यह पैडिंग जोड़ता है लेकिन विभक्त खिंचाव नहीं करता है।
सूफियान


43

यद्यपि निक रेमन डीईईएस द्वारा समाधान काम करता है, मैंने पाया कि मैं जो करना चाहता था उसके लिए एक इष्टतम समाधान नहीं था। मार्जिन सेट करने के लिए विभक्त का उपयोग करने में समस्या थी कि विभक्त अब दिखाई नहीं देगा इसलिए आप इसका उपयोग अपने आइटमों के बीच एक स्पष्ट सीमा दिखाने के लिए नहीं कर सकते हैं। इसके अलावा, यह प्रत्येक आइटम में अधिक "क्लिक करने योग्य क्षेत्र" नहीं जोड़ता है, इस प्रकार यदि आप अपनी वस्तुओं को क्लिक करने योग्य बनाना चाहते हैं और आपके आइटम पतले हैं, तो किसी भी आइटम पर क्लिक करना बहुत कठिन होगा क्योंकि विभक्त द्वारा जोड़ी गई ऊंचाई नहीं है किसी वस्तु का भाग।

सौभाग्य से मुझे एक बेहतर समाधान मिला जो आपको दोनों डिवाइडर दिखाने की अनुमति देता है और आपको मार्जिन नहीं बल्कि पैडिंग का उपयोग करके प्रत्येक आइटम की ऊंचाई को समायोजित करने की अनुमति देता है। यहाँ एक उदाहरण है:

सूची दृश्य

<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

सामग्री सूचीबद्ध करें

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="10dp"
    android:paddingTop="10dp" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="Item"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

वास्तव में एक बेहतर समाधान। धन्यवाद।
बिगयॉल्बी

17

आपको अपने ListViewआइटम your_listview_itemको कुछ अन्य लेआउट में लपेटना चाहिए ( जैसे) LinearLayoutऔर मार्जिन को इसमें जोड़ें your_listview_item:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <your_listview_item
        android:id="@+id/list_item"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
    ...
    ...
    />
</LinearLayout>

इस तरह से आप अंतरिक्ष को जोड़ सकते हैं, यदि आवश्यक हो, तो ListViewआइटम के दाएं और बाएं ।


3
मैं बायां / दायाँ मार्जिन चाहता था, इसलिए आपका उत्तर मेरे लिए मददगार था, लेकिन मुझे केवल दूसरे उद्देश्य के लिए एक और लेआउट को लपेटने का विचार पसंद नहीं आया
2cupsOfTech

कुछ तरीके हैं .. और यह कि प्रदर्शन को खराब करने के मामले में सबसे खराब है .. आइटम के दसियों (या सैकड़ों) के साथ सूचियों पर सोचने की कोशिश करें :)
andrea.rinaldi

@ andrea.spot दसियों या सैकड़ों वस्तुओं के साथ सूचियों के लिए कोई फर्क नहीं पड़ता, जब तक कि स्क्रीन पर एक बार में कितने आइटम दिखाई नहीं देते। ListView दृश्य पुनर्चक्रण का उपयोग करता है (यदि आपने अपने एडॉप्टर को सही तरीके से कार्यान्वित किया है)।
ataulm

1
यह काम नहीं करेगा यदि ListView आइटम की पृष्ठभूमि होगी
vovahost

11

अधिक स्थान जोड़ने के लिए मेरा समाधान, लेकिन क्षैतिज रेखा को फ़ोल्डर divider.xmlमें जोड़ना res/drawableऔर लाइन आकार को अंदर परिभाषित करना था:

divider.xml

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

    <stroke
        android:width="1px"
        android:color="@color/nice_blue" />

</shape>

तब मेरी सूची में मैं अपने विभक्त का संदर्भ इस प्रकार देता हूं:

<ListView
    android:id="@+id/listViewScheduledReminders"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_marginBottom="@dimen/mediumMargin"
    android:layout_weight="1"
    android:divider="@drawable/divider"
    android:dividerHeight="16.0dp"
    android:padding="@dimen/smallMargin" >

</ListView>

android:dividerHeight="16.0dp"इस ऊंचाई को बढ़ाने और घटने से ध्यान दें मैं मूल रूप से डिवाइडर लाइन के ऊपर और नीचे अधिक पैडिंग जोड़ रहा हूं।

मैंने इस पृष्ठ को संदर्भ के लिए उपयोग किया है: http://developer.android.com/guide/topics/resources/drawable-resource.html#stroke-element


8

यदि आप मार्जिन के साथ और इसे स्ट्रेच किए बिना एक विभक्त दिखाना चाहते हैं - InsetDrawable का उपयोग करें (आकार एक प्रारूप में होना चाहिए, जिसके बारे में @Nik Reiman ने कहा):

सूची दृश्य:

<ListView
    android:id="@+id/listView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:cacheColorHint="#00000000"
    android:divider="@drawable/separator_line"
    android:dividerHeight="10.0px"/>

@ Drawable / separator_line:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="5.0px"
    android:insetRight="5.0px"
    android:insetTop="8.0px"
    android:insetBottom="8.0px">

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <gradient
            android:startColor="@color/colorStart"
            android:centerColor="@color/colorCenter"
            android:endColor="@color/colorEnd"
            android:type="linear"
            android:angle="0">
        </gradient>
    </shape>
</inset>

7

आप उपयोग कर सकते हैं:

android:divider="@null"
android:dividerHeight="3dp"

उदाहरण:

<ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView" android:layout_gravity="center_horizontal"
        android:dividerHeight="3dp"
        android:divider="@null" android:clickable="false"/>

सूची आइटम लेआउट के साथ अशक्त संयोजन सबसे अच्छा प्रभाव पैदा करता है
प्रो

6

मेरे आवेदन के लिए, मैंने इस तरह किया है

 <ListView
    android:id="@+id/staff_jobassigned_listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@null"
    android:dividerHeight="10dp">

</ListView>

बस set the divider to nullऔर डिवाइडर को ऊंचाई प्रदान करना मेरे लिए था।

उदाहरण :

android:divider="@null"

या

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

और यह परिणाम है

यहां छवि विवरण दर्ज करें


मुझे लगता है, बेहतर है android:divider="@android:color/transparent"
CoolMind

5

मुझे एहसास है कि एक उत्तर पहले से ही चुना गया था, लेकिन मैं सिर्फ इस बात को साझा करना चाहता था कि इस मुद्दे पर भागते समय मेरे लिए काम करना क्या खत्म हो जाएगा।

मेरे पास एक सूची दृश्य था जहां सूची में प्रत्येक प्रविष्टि को अपने स्वयं के लेआउट द्वारा परिभाषित किया गया था, जो कि सैमी ने अपने प्रश्न में पोस्ट किया था। मैंने डिवाइडर की ऊँचाई को बदलने के सुझाए गए दृष्टिकोण की कोशिश की, लेकिन एक अदृश्य डिवाइडर के साथ यह सब बहुत सुंदर नहीं लग रहा था। कुछ प्रयोग के बाद, मैंने बस android:paddingBottom="5dip"एक्सएमएल फ़ाइल में अंतिम टेक्स्ट व्यू लेआउट तत्व में जोड़ा जो व्यक्तिगत सूची दृश्य प्रविष्टियों को परिभाषित करता है।

इसने मुझे वही दिया जो मैं उपयोग के माध्यम से हासिल करने की कोशिश कर रहा था android:layout_marginBottom। मैंने इस समाधान को विभक्त ऊंचाई बढ़ाने की कोशिश करने की तुलना में अधिक सौंदर्यवादी रूप से सुखद परिणाम देने के लिए पाया।


4

मार्जिन देने के बजाय, आपको पैडिंग देना चाहिए:

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:divider="@android:color/green"
    android:dividerHeight="4dp"
    android:layout_alignParentTop="true"
    android:padding="5dp" >

</ListView>

या

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:paddingTop="2dp"
    android:divider="@android:color/green"
    android:dividerHeight="4dp"
    android:paddingLeft="1dp"
    android:paddingRight="1dp"
    android:paddingBottom="2dp"
    android:paddingStart="0dp"
    android:paddingEnd="0dp" >

</ListView>

3

ओपी के मौजूदा कोड (सूची आइटम पहले से ही पैडिंग हो गए हैं) के साथ सबसे सरल समाधान निम्नलिखित कोड जोड़ना है:

listView.setDivider(new ColorDrawable(Color.TRANSPARENT));  //hide the divider
listView.setClipToPadding(false);   // list items won't clip, so padding stays

इस एसओ जवाब ने मेरी मदद की।

नोट: आप पुराने प्लेटफार्मों पर भी जल्द ही सूची आइटम रीसाइक्लिंग की एक बग का सामना कर सकते हैं, जैसा कि यहां पूछा गया है


1
आप डिवाइडर को शून्य में सेट कर सकते हैं और डिवाइडर को सेट कर सकते हैं जो आपको पसंद है।
एंड्रयू गैलाश

1
@ और मुझे लगता है कि यह वस्तुओं के बीच पैडिंग को भी हटा देगा। ओपी जिस मुद्दे को हल करना चाहता था, उसे वह मुद्दा बना रहा है ..
सूफियान

2
<ListView
    android:clipToPadding="false"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:dividerHeight="10dp"
    android:divider="@null"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</ListView>

और सेट paddingTop, paddingBottomऔर dividerHeightसूची के ऊपर और नीचे सभी तत्वों और अंतरिक्ष के बीच समान रिक्ति प्राप्त करने के लिए समान मूल्य।

मैंने इस गद्देदार क्षेत्र में विचारों को खींचने के लिए निर्धारित clipToPaddingकिया falseहै।

मैंने सूची तत्वों के बीच की रेखाओं को हटाने के लिए सेट dividerकिया @null


2

सूची आइटम के बीच रिक्ति को बढ़ाने के लिए एक और तरीका यह है कि आप अपने एडेप्टर कोड में एक खाली दृश्य जोड़ते हैं, जिसमें आपके द्वारा आवश्यक रिक्ति के साथ लेआउट_हाइट विशेषता प्रदान करता है। उदाहरण के लिए, अपनी सूची आइटमों के बीच नीचे रिक्ति बढ़ाने के लिए अपनी सूची आइटम्स के अंत में यह डमी दृश्य (खाली दृश्य) जोड़ें।

<View
    android:layout_width="match_parent"
    android:layout_height="15dp"/>

तो यह सूची दृश्य वस्तुओं के बीच 15 डीपी का निचला स्थान प्रदान करेगा। आप इसे सीधे जोड़ सकते हैं यदि मूल लेआउट रैखिकलआउट है और अभिविन्यास लंबवत है या अन्य लेआउट के लिए उचित कदम उठाते हैं। उम्मीद है की यह मदद करेगा :-)


2

आपको बस सूची विभक्त की पृष्ठभूमि को पारदर्शी बनाने और अपने आवश्यक अंतराल के अनुसार ऊंचाई बनाने की आवश्यकता है।

<ListView 
         android:id="@+id/custom_list"
         android:layout_height="match_parent"
         android:layout_width="match_parent"
         android:divider="#00ffffff"
         android:dividerHeight="20dp"/>

1

मुझे इस बात के लिए एक अच्छा-अच्छा समाधान नहीं मिला कि आप एक क्षैतिज क्षैतिज दृश्य का उपयोग कर रहे हैं, क्योंकि डिवाइडर इसके साथ काम नहीं करते हैं, लेकिन मुझे लगता है कि यह अधिक सामान्य सूची दृश्य के लिए या तो काम करेगा।

बस जोड़ना:

<View
android:layout_marginBottom="xx dp/sp"/>

एडेप्टर वर्ग में आपके द्वारा फुलाए गए लेआउट के सबसे निचले दृश्य में वस्तुओं के बीच रिक्ति पैदा होगी


1

किसी सूची दृश्य के अंदर विचारों के बीच अंतर देने के लिए कृपया अपने फुलाए हुए विचारों पर पैडिंग का उपयोग करें।

आप अपने दृश्य या उन विचारों या android:paddingBottom="(number)dp"उपयोगों का उपयोग कर सकते हैं जिन्हें आप android:paddingTop="(number)dp"अपनी सूची में शामिल कर रहे हैं।

विभक्त समाधान केवल एक फिक्स है, क्योंकि किसी दिन, जब आप एक विभक्त रंग (अभी यह पारदर्शी है) का उपयोग करना चाहते हैं, तो आप देखेंगे कि विभक्त रेखा खिंच गई है।


1

इन समाधानों का एक बहुत काम करते हैं। हालाँकि, यदि आप चाहते हैं कि सभी वस्तुओं के बीच मार्जिन को निर्धारित करने में सक्षम हो सकें, जो कि मैं सबसे सरल विधि के साथ आया हूं, तो आपके आइटम को लपेटना है - आपके मामले में CheckedTextView - एक LinearLayout में और उस आइटम के लिए अपना मार्जिन फ़ॉर्मेटिंग में डाल दें। रूट-लेआउट नहीं। इस रैपिंग लेआउट को एक आईडी देना सुनिश्चित करें और इसे अपने एडेप्टर में अपने CheckedTextView के साथ बनाएं।

बस। वास्तव में, आप सूची दृश्य के लिए आइटम स्तर पर मार्जिन को तत्काल देख रहे हैं। क्योंकि ListView किसी भी आइटम लेआउट के बारे में नहीं जानता है - केवल आपका एडेप्टर करता है। यह मूल रूप से उस आइटम लेआउट के हिस्से को फुलाता है जिसे पहले अनदेखा किया जा रहा था।


0

यह आपको विभक्त ऊंचाई जोड़ने में मदद करेगा।

 getListView().setDividerHeight(10)

यदि आप एक कस्टम दृश्य जोड़ना चाहते हैं, तो आप listView आइटम लेआउट में एक छोटा दृश्य जोड़ सकते हैं।

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