অ্যান্ড্রয়েড লিস্টভিউ ডিভাইডার


98

আমার এই কোডটি রয়েছে:

<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>

তবে আমি কোনও বিভাজক দেখতে পাচ্ছি না।


4
কেন জানি না তবে কোডটি অনুপস্থিত। এখানে এটি আবার:
oriharel

<লিস্টভিউ অ্যান্ড্রয়েড: লেআউট_উইথ = "র‌্যাপ_কন্টেন্ট" অ্যান্ড্রয়েড: লেআউট_উইট = "র‌্যাপ_কন্টেন্ট" অ্যান্ড্রয়েড: আইডি = "@ + আইডি / নগদ আইটেমলিস্ট" অ্যান্ড্রয়েড: ক্যাশে কলরহিন্ট = "# 00000000" অ্যান্ড্রয়েড: বিভাজক = "@ অঙ্কনযোগ্য / তালিকা_বিভাজনকারী"> << তালিকাভিউ>
oriharel

4
এবং তালিকার বিভাজকটি হ'ল: <আকৃতি xMLns: অ্যান্ড্রয়েড = " স্কিমাস.অ্যান্ড্রয়েড. com/apk/res/android " অ্যান্ড্রয়েড: আকৃতি = "লাইন"> <স্ট্রোক অ্যান্ড্রয়েড: প্রস্থ = "1 ডিপি" অ্যান্ড্রয়েড: রঙ = "# 8F8F8F" অ্যান্ড্রয়েড: ড্যাশউইথ = "1 ডিপি" অ্যান্ড্রয়েড: ড্যাশগ্যাপ = "1 ডিপি" /> </
translation

কোড সন্নিবেশ করার জন্য কোড ব্লক (101010 আইকন) ব্যবহার করুন, বিশেষত এক্সএমএল / এইচটিএমএল / এসজিএমএল কোড। আমি আপাতত আপনার পোস্ট স্থির করেছি।
মিথ্যা রায়ান

হতে পারে আপনার সমস্যার কারণটি আপনার তালিকার অ্যাডাপ্টারে রয়েছে। অ্যাডাপ্টারের হ'লআলিটাইমসনেবল () এর ঠিক ফিরে আসার চেষ্টা করুন। অথবা দেখা stackoverflow.com/questions/5587826/...
grine4ka

উত্তর:


176

লোকেরা, এখানে কেন আপনার 1 ডিপি বা 1 ডিআইপি পরিবর্তে 1 পিক্স ব্যবহার করা উচিত: আপনি যদি 1 ডিপি বা 1 ডিপ নির্দিষ্ট করেন তবে অ্যান্ড্রয়েড এটিকে কমিয়ে দেবে। একটি 120 ডিপিআই ডিভাইসে, এটি 0.75px এর মতো অনুবাদিত আকারে পরিণত হয়, যা 0 টি হয় some কিছু ডিভাইসে, এটি 2-3 পিক্সেলের সাথে অনুবাদ হয় এবং এটি সাধারণত কুৎসিত বা ম্লান দেখাচ্ছে

বিভাজকের জন্য, 1 পিক্স্স হ'ল সঠিক উচ্চতা যদি আপনি 1 পিক্সেল ডিভাইডার চান এবং "সমস্ত কিছু ডুবানো উচিত" নিয়মের ব্যতিক্রমগুলির মধ্যে একটি। এটি সমস্ত পর্দায় 1 পিক্সেল হবে। প্লাস, 1 পিএক্স সাধারণত এইচডিপিআই এবং উপরের স্ক্রিনগুলিতে আরও ভাল দেখায়

"এটি আর ২০১২ নয়" সম্পাদনা: আপনাকে কোনও নির্দিষ্ট স্ক্রিনের ঘনত্ব থেকে শুরু করে ডিপি / ডিপ থেকে স্যুইচ করতে হতে পারে


4
কি দারুন. আমার জীবন সংরক্ষিত. "ডিপ" ব্যবহারের জন্য অ্যান্ড্রয়েডের অফিসিয়াল গাইডের অংশ হওয়া উচিত
ডিসি

আমি রাজী. তাদের কমপক্ষে পেক্স সম্পর্কে এই বিধিটি উল্লেখ করা উচিত কেন তারা তা রয়েছে তার একটি উদাহরণ হিসাবে।
জো প্লান্ট

6
Ldpi- এ, 1dp = 0.75 পিক্সেল, অতএব এটি 0 টি করে গোল হয় ider ডিভাইডারটি তখন টানা হয় না, যা অন্যদের জন্য সমস্যা সৃষ্টি করতে পারে। এটি সম্পূর্ণভাবে px ব্যবহার করার বিষয়ে অভিযোগ করে এই থ্রেডের অন্যান্য বিবৃতিগুলিকেও বোঝায়। এটিই তার সমস্যার সমাধান হতে পারে এবং নাও হতে পারে এবং এটি কিনা তা ঘোষণা করা তার পক্ষে
জো প্লান্ট

18
1 পিএক্স এক্সএক্সএইচডিপি ডিভাইসে অবিশ্বাস্যরকম ছোট হতে চলেছে এবং কোনও কোনও মুহুর্তে (ডিভাইসগুলি আরও উচ্চ ঘনত্ব পেতে থাকে) এগুলি দেখতে মোটেই ছোট হবে। ডিপ এটি এড়ায় এবং ldpi ডিভাইসগুলির জন্য আরেকটি সমাধান হ'ল মান-ldpi ফোল্ডারে 1px এবং উচ্চ ঘনত্বের জন্য 1dip ব্যবহার করা।
eski

4
আমি যখন এই প্রতিক্রিয়াটি পোস্ট করেছি, এক্সএক্সএইচডিপিআই আমার মনে হয় ঠিক বেরিয়ে এসেছিল। যাইহোক, আপনার পোস্ট, জ্ঞান করে তোলে বিশেষ করে xxxhdpi এবং সম্ভবত দিগন্তে xxxxhdpi সঙ্গে
জো Plante

55

এটি একান্ত বাস্তব, তবে আমার পক্ষে কাজ করে:

নীচে res / অঙ্কনযোগ্য / divider.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>

তালিকাগুলি আইটেমের জন্য এবং স্টাইল.এক্সএমএলগুলিতে আমি নিম্নলিখিত লাইনগুলি যুক্ত করেছি:

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

গুরুত্বপূর্ণ অংশটি এই 1 পিএক্স সেটিংস অন্তর্ভুক্ত করা ছিল। অবশ্যই, অঙ্কনযোগ্য গ্রেডিয়েন্ট ব্যবহার করে (1px সহ) এবং এটি সর্বোত্তম সমাধান নয়। আমি স্ট্রোক ব্যবহার করার চেষ্টা করেছি কিন্তু এটি কাজ করতে পেলাম না। (আপনি শৈলীগুলি ব্যবহার করছেন বলে মনে হয় না, তাই কেবল অ্যান্ড্রয়েড যুক্ত করুন: তালিকার ভিউয়ের জন্য ডিভাইডারহাইট = "1px" গুণাবলী attrib


14
অথবা সেরা অনুশীলনের জন্য 1 ডিপি ব্যবহার করুন।
ত্রিস্তান ওয়ার্নার-স্মিথ

4
আপনি কেন 270 এর কোণ ব্যবহার করছেন? তালিকার বিভাজকগুলি অনুভূমিক রেখা। 270 একটি উল্লম্ব গ্রেডিয়েন্ট।
ক্রিস্টোফার পেরি

এটি কি অ্যান্ড্রয়েডে বাগ নেই? বিভাজক হিসাবে একটি লাইন আকার ঠিক কাজ করা উচিত নয়?
ডিডেরিক

8
1 পিএক্স সম্পদগুলি নিয়মের ব্যতিক্রম
জো প্লান্ট

4
@ ট্রিস্তান ওয়ার্নার-স্মিথ এটি ভুল। এই ক্ষেত্রে আপনার 1px ব্যবহার করা উচিত। গৃহীত উত্তর দেখুন।
mpellegr

27

যোগ করুন 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

ডক থেকে :

ফাইলের অবস্থান:

res / অঙ্কনযোগ্য / filename.xML

ফাইলের নাম রিসোর্স আইডি হিসেবে ব্যবহার করা হয়

মূলত, আপনাকে একটি ফাইল list_divider.xmlরাখতে হবে res/drawable/যাতে আপনি এটি হিসাবে অ্যাক্সেস করতে পারেন R.drawable.list_divider; আপনি যদি সেভাবে এটি অ্যাক্সেস করতে পারেন তবে আপনি android:divider="@drawable/list_divider"এক্সএমএল এর জন্য ব্যবহার করতে পারেন ListView


আমি গ্রহণের সাথে কাজ করি, তাই যদি আমি এটি না করতাম, কোডটি সংকলন করে না। সুতরাং, স্থানে থাকা ফাইলের সাথে, এখনও তালিকার ভিউটি আমার কাস্টম ডিভাইডারকে উপেক্ষা করে।
oriharel

2

কিছু লোক শক্ত রেখার সম্মুখীন হতে পারে। android:layerType="software"অঙ্কনযোগ্য রেফারেন্সিং ভিউ যোগ করে আমি এই কাছাকাছি পেয়েছিলাম ।


1

রাউন্ড-অফ ত্রুটির কারণে অদৃশ্য হয়ে যাওয়া বিষয়গুলি সম্পর্কে অ্যান্ড্রয়েড ডক্স সতর্ক করে ... সম্ভবত px এর পরিবর্তে dp চেষ্টা করুন এবং সম্ভবত> 1 চেষ্টা করে দেখুন এটি রাউন্ড-অফ সমস্যা কিনা।

দেখতে http://developer.android.com/guide/practices/screens_support.html#testing

বিভাগটির জন্য "1 পিক্সেল উচ্চতা / প্রস্থ সহ চিত্র"


হ্যাঁ যদি আপনি 2 বা ততোধিক ডিপি / ডিপ ব্যবহার করছেন তবে আপনি ঠিক আছেন। তবে, আপনি যদি কেবল সেই 1-পিক্সেল ডিভাইডার চান তবে px হ'ল উপায়। আপনি আরও 1 পিক্স সহ আরও পর্দার রিয়েল এস্টেট পাবেন, প্লাস 1 পিএক্স সাধারণত আরও ভাল দেখায়
জো প্লান্ট

1

আমারও একই প্রশ্ন ছিল. তবে 1 পিএক্স ভিউটি করা আমার আসল নেক্সাস 7 এ কাজ করে বলে মনে হচ্ছে না I আমি লক্ষ্য করেছি যে স্ক্রিনের ঘনত্ব 213 যা এক্সএইচডিপিতে ব্যবহৃত 240 এর চেয়ে কম less সুতরাং এটি ভেবেছিল ডিভাইসটি একটি এমডিপিআই ঘনত্ব।

আমার সমাধানটি এটি তৈরি করা ছিল যাতে dimensফোল্ডারে একটি dividerHeightপ্যারামিটার থাকে। আমি এটা সেট 2dpমধ্যে values-mdpiফোল্ডারের কিন্তু 1dpvalues-hdpiইত্যাদি ফোল্ডার নেই।


1

আপনি আপনার ডিভাইডার এক্সএমএল লেআউটে ডিভাইডারের শেষে একটি "আর" ভুলে গেছেন

আপনি লেআউটটিকে @ অঙ্কনযোগ্য / তালিকা_বিভাজনকারী বলছেন তবে আপনার বিভাজকের এক্সএমএলটির নাম "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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.