एंड्रॉइड लिस्ट व्यू डिवाइडर


97

मेरे पास यह कोड है:

<ListView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList"
     android:cacheColorHint="#00000000"
     android:divider="@drawable/list_divider"></ListView>

कहाँ @drawable/list_dividerहै:

<shape
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="line">
 <stroke
   android:width="1dp"
   android:color="#8F8F8F"
   android:dashWidth="1dp"
   android:dashGap="1dp" />
</shape>

लेकिन मैं कोई विभक्त नहीं देख सकता।


1
मुझे पता नहीं क्यों लेकिन कोड गायब है। यहाँ यह फिर से है:
oriharel

<लिस्ट व्यू एंड्रॉइड: लेआउट_ एक्सपोज़र = "रैप_ कॉन्टेंट" एंड्रॉइड: लेआउट_हाइट = "रैप_ कॉन्टेंट" एंड्रॉइड: आईडी = "@ आईडी / कैशइथाइमलिस्ट" एंड्रॉइड: cacheColorHint = "# 00000000": डिवाइडर = "@ drawable / list_divider"> </ ListView>
ओरिहेल

1
और सूची विभक्त है: <आकार xmlns: android = " schemas.android.com/apk/res/android " Android: shape = "line"> <स्ट्रोक android: चौड़ाई = "1dp" Android: color = "# 8x8F8F" Android: dashWidth = "1dp" Android: dashGap = "1dp" /> </ shape>
oriharel

कोड डालने के लिए कोड ब्लॉक (101010 आइकन) का उपयोग करें, विशेष रूप से XML / HTML / SGML कोड। मैंने अभी के लिए आपका पोस्ट ठीक कर दिया है।
रेयान

हो सकता है कि आपकी समस्या का कारण आपके ListAdapter में हो। बस अडैप्टर के असली लौटने की कोशिश करो। या देखें stackoverflow.com/questions/5587826/…
grine4ka

जवाबों:


175

दोस्तों, यहाँ पर आपको 1dp या 1dip के बजाय 1px का उपयोग करना चाहिए: यदि आप 1dp या 1dip निर्दिष्ट करते हैं, तो Android उस स्तर को माप देगा। 120dpi डिवाइस पर, जो 0.75px अनुवादित जैसा कुछ हो जाता है, जो कि राउंड 0. होता है। कुछ उपकरणों पर, जो 2-3 पिक्सेल में अनुवाद करता है, और यह आमतौर पर बदसूरत या मैला दिखता है

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

"यह अब 2012 नहीं है" संपादित करें: आपको एक निश्चित स्क्रीन घनत्व पर dp / dip पर स्विच करना पड़ सकता है


4
वाह। मेरी ज़िंदगी बचाई। "डिप" का उपयोग करने के लिए एंड्रॉइड के आधिकारिक गाइड का हिस्सा होना चाहिए
deeJ

मैं सहमत हूँ। उन्हें कम से कम इस बात का उल्लेख करना चाहिए कि पीएक्स के बारे में नियम इस बात का उदाहरण है कि उनके पास यह क्यों है।
जो प्लांट

6
Ldpi पर, 1dp = 0.75 पिक्सल्स, इसलिए राउंड डाउन 0. तक हो जाता है। डिवाइडर तब खींचा नहीं जाता है, जो दूसरों के लिए समस्या उत्पन्न कर सकता है। यह इस थ्रेड में अन्य कथनों को भी संदर्भित करता है, जो कि पूरी तरह से px का उपयोग करने के बारे में शिकायत करते हैं। यह उसकी समस्या का समाधान हो सकता है या नहीं भी हो सकता है और यह घोषणा करना उसके ऊपर है कि वह है या नहीं
जो प्लंते

18
1 xxhdpi डिवाइस पर अविश्वसनीय रूप से छोटा होने जा रहा है, और कुछ बिंदु पर (जैसा कि डिवाइस उच्च घनत्व प्राप्त करना जारी रखते हैं) बिल्कुल भी देखने के लिए बहुत छोटा होगा। डुबकी से बचा जाता है, और ldpi उपकरणों के लिए एक और समाधान है मानों-ldpi फ़ोल्डर में 1px और उच्च घनत्व के लिए 1dip का उपयोग करना।
०४

2
जब मैंने उस प्रतिक्रिया को पोस्ट किया, तो मुझे लगता है कि xxhdpi अभी बाहर आ रहा था। हालाँकि, आपकी पोस्ट समझ में आता है, विशेष रूप से xxxhdpi और संभवतः xxxxhdpi के साथ क्षितिज पर
जो

54

यह वर्कअराउंड है, लेकिन मेरे लिए काम करता है:

इस प्रकार बनाया गया res / drawable / विभक्त। xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape
  xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient android:startColor="#ffcdcdcd" android:endColor="#ffcdcdcd" android:angle="270.0" />
</shape>

और listview आइटम के लिए style.xml में, मैंने निम्नलिखित पंक्तियाँ जोड़ीं:

    <item name="android:divider">@drawable/divider</item>
    <item name="android:dividerHeight">1px</item>

इस 1px सेटिंग को शामिल करने के लिए महत्वपूर्ण हिस्सा था। बेशक, ड्रायबल ढाल (1px के साथ) का उपयोग करता है और यह इष्टतम समाधान नहीं है। मैं स्ट्रोक का उपयोग करने की कोशिश की, लेकिन यह काम करने के लिए नहीं मिला। (आप शैलियों का उपयोग नहीं करते हैं, इसलिए केवल Android जोड़ें: ListView के लिए डिवाइडर = "1px" विशेषता।


14
या सर्वोत्तम अभ्यास के लिए 1dp का उपयोग करें।
ट्रिस्टन वार्नर-स्मिथ

2
आप 270 के कोण का उपयोग क्यों कर रहे हैं? सूची डिवाइडर क्षैतिज रेखाएँ हैं। 270 एक ऊर्ध्वाधर ढाल है।
क्रिस्टोफर पेरी

क्या यह Android में बग नहीं है? डिवाइडर के रूप में एक लाइन आकार सिर्फ काम नहीं करना चाहिए?
डिडेरिक

8
1px संपत्ति नियम के अपवाद हैं
जो प्लांट

1
@ ट्रिस्टेनवर्नर-स्मिथ यह गलत है। आपको इस स्थिति में 1px का उपयोग करने की आवश्यकता है। स्वीकृत उत्तर देखें।
मईलेग्रे

26

जोड़ें android:dividerHeight="1px"और यह काम करेगा:

<ListView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList"
     android:cacheColorHint="#00000000"
     android:divider="@drawable/list_divider" android:dividerHeight="1px"></ListView>

15

समस्या यह है कि आप इस तथ्य से उपजी हैं कि आप एंड्रॉइड को याद कर रहे हैं: डिवाइडर, जिसकी आपको आवश्यकता है, और यह तथ्य कि आप अपने ड्रॉबल में एक लाइन वजन निर्दिष्ट करने की कोशिश कर रहे हैं, जिसे आप कुछ के लिए डिवाइडर के साथ नहीं कर सकते हैं अजीब कारण। काम करने के लिए अपना उदाहरण प्राप्त करने के लिए आवश्यक रूप से आप निम्न जैसा कुछ कर सकते हैं:

या तो एक आयत या एक पंक्ति के रूप में अपने ड्रा करने योग्य बनाएँ, या तो काम करता है आप बस उस पर कोई भी आयाम सेट करने का प्रयास नहीं कर सकते हैं, इसलिए:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
     <stroke android:color="#8F8F8F" android:dashWidth="1dp" android:dashGap="1dp" />
</shape>

या:

<shape xmlns:android="http://schemas.android.com/apk/res/android"  android:shape="rectangle">
     <solid android:color="#8F8F8F"/>
</shape>

फिर एक कस्टम शैली बनाएं (सिर्फ एक प्राथमिकता लेकिन मुझे सामान का पुन: उपयोग करने में सक्षम होना पसंद है)

<style name="dividedListStyle" parent="@android:style/Widget.ListView">
    <item name="android:cacheColorHint">@android:color/transparent</item>
    <item name="android:divider">@drawable/list_divider</item>
    <item name="android:dividerHeight">1dp</item>
</style>

अंत में कस्टम शैली का उपयोग करके अपनी सूची दृश्य घोषित करें:

<ListView
     style="@style/dividedListStyle"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/cashItemsList">
</ListView>

मैं मान रहा हूं कि आप इन स्निपेट्स का उपयोग करना जानते हैं, अगर मुझे नहीं बताना है। मूल रूप से आपके प्रश्न का उत्तर यह है कि आप डिवाइडर में विभक्त मोटाई सेट नहीं कर सकते हैं, आपको वहां की चौड़ाई को अपरिभाषित छोड़ना होगा और इसके बजाय इसे सेट करने के लिए एंड्रॉइड: डिवाइडर का उपयोग करना होगा।


8

डॉक्टर से:

public void setDivider(Drawable divider) on ListView

/**
 * Sets the drawable that will be drawn between each item in the list. If the drawable does
 * not have an intrinsic height, you should also call {@link #setDividerHeight(int)}
 *
 * @param divider The drawable to use.
 */

ऐसा लगता है कि setDividerHeight()यदि कोई आंतरिक ऊंचाई नहीं है, तो विभक्त को दिखाने के लिए बुलाया जाना चाहिए


5

आपको @drawable/list_divideइस तरह दिखना चाहिए:

<shape
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="line">
 <stroke
   android:height="1dp"
   android:color="#8F8F8F"
   android:dashWidth="1dp"
   android:dashGap="1dp" />
</shape>

अपने संस्करण में आप एक प्रदान करते हैं android:width="1dp", बस इसे एक में बदल दें android:height="1dp"और इसे काम करना चाहिए!


5
एंड्रॉइड: ऊंचाई स्ट्रोक के लिए एक वैध विशेषता नहीं है, और चौड़ाई का मतलब है कि स्ट्रोक कितना चौड़ा है, न कि कितना लंबा है। आपके "समाधान" कार्यों का एकमात्र कारण यह है कि एंड्रॉइड उस ऊंचाई मूल्य को नहीं पहचानता है।
जस्टिन बसर

4

से दस्तावेज़ :

फाइल का पता:

रेस / drawable / filename.xml

फ़ाइल नाम संसाधन आईडी के रूप में प्रयोग किया जाता है

मूल रूप से, आपको नाम की एक फ़ाइल डालनी होगी list_divider.xml, res/drawable/ताकि आप इसे एक्सेस कर सकें R.drawable.list_divider; यदि आप इसे इस तरह एक्सेस कर सकते हैं, तो आप android:divider="@drawable/list_divider"XML के लिए उपयोग कर सकते हैं ListView


मैं ग्रहण के साथ काम करता हूं, इसलिए अगर मैंने ऐसा नहीं किया होता तो कोड संकलित नहीं होता। इसलिए, जगह में फ़ाइल के साथ, अभी भी लगता है कि सूची दृश्य मेरे कस्टम विभक्त को अनदेखा करता है।
ओरिहेल

2

कुछ लोगों को एक ठोस रेखा का अनुभव हो सकता है। मुझे यह android:layerType="software"देखने योग्य जोड़ने के दृश्य में जोड़कर मिला ।


1

एंड्रॉइड डॉक्स राउंड-ऑफ त्रुटि के कारण गायब होने वाली चीज़ों के बारे में चेतावनी देता है ... शायद पीएक्स के बजाय डीपी की कोशिश करें, और शायद यह देखने की भी कोशिश करें कि गोल-अप समस्या है या नहीं।

http://developer.android.com/guide/practices/screens_support.html#testing देखें

"1 पिक्सेल ऊँचाई / चौड़ाई वाले चित्र" अनुभाग के लिए


हां। यदि आप 2 या अधिक dp / dip का उपयोग कर रहे हैं, तो आप ठीक हैं। हालाँकि, यदि आप चाहते हैं कि 1-पिक्सेल विभक्त, px जाने का रास्ता है। आपको 1px के साथ अधिक स्क्रीन अचल संपत्ति भी मिलती है, प्लस 1 पीएक्स आमतौर पर बेहतर दिखता है
जो प्लांट

1

मेरी भी यही समस्या थी। हालाँकि, यह देखते हुए कि 1px मेरे मूल Nexus 7 पर काम नहीं करता था। मैंने देखा कि स्क्रीन घनत्व 213 था जो xhdpi में प्रयुक्त 240 से कम है। तो यह सोच रहा था कि डिवाइस एक mdpi घनत्व था।

मेरा समाधान यह बनाना था ताकि dimensफ़ोल्डर में एक dividerHeightपैरामीटर था। मैं इसे करने के लिए सेट 2dpमें values-mdpiफ़ोल्डर लेकिन 1dpमें values-hdpiआदि फ़ोल्डरों।


1

आप अपने विभक्त xml लेआउट में विभक्त के अंत में एक "r" भूल गए

आप लेआउट को @ drawable / list_divider कहते हैं लेकिन आपके विभक्त xml का नाम "list_divide" है


-1

सेट एंड्रॉइड: डिवाइडरहाइट = "1 डीपी"

<ListView
            android:id="@+id/myphnview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@drawable/dividerheight"
            android:background="#E9EAEC"
            android:clickable="true"
    android:divider="@color/white"
                android:dividerHeight="1dp"
                android:headerDividersEnabled="true" >
    </ListView>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.