অ্যান্ড্রয়েডে তালিকাগুলি আইটেমগুলির মধ্যে কীভাবে স্থান নির্ধারণ করবেন


371

তালিকার ভিউ আইটেমের মধ্যে স্থান তৈরি করতে আমি তালিকায় ভিউমারটি ব্যবহার করার চেষ্টা করেছি, তবে এখনও আইটেমগুলি একত্রে সংযুক্ত রয়েছে।

এটা কি সম্ভব? যদি হ্যাঁ, এটি করার একটি নির্দিষ্ট উপায় আছে?

আমার কোডটি নীচে

<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", এবং "10 এসএস" এর মতো মানগুলি অ্যান্ড্রয়েড দ্বারা dividerHeightমানটির জন্য প্রত্যাখ্যান করা হয়। এটি একটি ভাসমান পয়েন্ট নম্বর এবং একটি ইউনিট চায় যেমন "10.0sp"। @ গুফাইহ্যাড নোট হিসাবে, আপনি এই মানটির জন্য প্রদর্শন-স্বাধীন পিক্সেলও ব্যবহার করতে পারেন (যেমন, "10 ডিপি")।


24
আপনি যদি এটির প্রসারিত না করেও কোনও বিভাজক প্রদর্শন করতে চান তবে এটি কোনও লাভ করে না
Sojurn

4
এফওয়াইআই - কোডের মাধ্যমে করা যেতে পারে - getListView ()। SetDividerHeight (10)
আনহিসির্ক দাশারপ

2
বা অ্যান্ড্রয়েড: ডিভাইডার = "@ নাল"
কেভিন

@ সজুরন যদি আমি এরকম কিছু দরকার হয় তবে আমি 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 1'12

কয়েকটি উপায় আছে .. এবং লেআউটিং পারফরম্যান্সের দিক থেকে এটিই খারাপ .. .. দশম (বা শত) আইটেম সহ তালিকাগুলিতে চিন্তা করার চেষ্টা করুন :)
andrea.rinaldi

@ andrea.spot দশম বা শত শত আইটেম সহ তালিকাগুলির জন্য কিছু যায় আসে না যদি না পর্দায় একবারে কতগুলি আইটেম দৃশ্যমান হত। লিস্টভিউ ভিউ রিসাইক্লিং ব্যবহার করে (যদি আপনি আপনার অ্যাডাপ্টারটি সঠিকভাবে প্রয়োগ করেছেন)।
ataulm


11

আরো স্থান যোগ কিন্তু অনুভূমিক রেখা রাখা আমার সমাধান যোগ করার জন্য ছিল divider.xmlres/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

আপনি যদি মার্জিন সহ এবং কোনও প্রসারিত ছাড়াই কোনও বিভাজকটি দেখাতে চান - ইনসেটড্রেবেবল ব্যবহার করুন (আকার অবশ্যই একটি ফর্ম্যাটে থাকতে হবে, যার সম্পর্কে @ নিক রেইমান বলেছেন):

তালিকা দেখুন:

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

@ অঙ্কনযোগ্য / 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"
কুলমাইন্ড

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

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

বিভাজক সমাধানটি ঠিক একটি স্থির কারণ কোনও দিন, আপনি যখন কোনও ডিভাইডার রঙ ব্যবহার করতে চান (এখনই এটি স্বচ্ছ) আপনি দেখতে পাবেন যে ডিভাইডার লাইনটি প্রসারিত হয়েছে।


1

এই সমাধান অনেক কাজ। যাইহোক, আপনি যদি চান সমস্ত হ'ল আইটেমগুলির মধ্যে মার্জিন সেট করতে সক্ষম হোন আমি যে সহজ পদ্ধতিটি নিয়ে এসেছি তা হ'ল আপনার আইটেমটি জড়িত করা - আপনার ক্ষেত্রে চেকড টেক্সটভিউ - একটি লিনিয়ারলয়েটে এবং এতে আইটেমটির জন্য আপনার মার্জিন ফর্ম্যাটিং রেখে দেওয়া, মূল-বিন্যাস নয়। এই মোড়ানোর লেআউটটিকে একটি আইডি দেওয়ার বিষয়ে নিশ্চিত হন এবং এটি আপনার অ্যাডাপ্টারে আপনার চেকডেক্সটভিউয়ের সাথে তৈরি করুন।

এটাই. বাস্তবে, আপনি তালিকাভিউয়ের জন্য আইটেম স্তরে মার্জিনটি ইনস্ট্যান্ট করছেন। কারণ তালিকাভিউ কোনও আইটেমের বিন্যাস সম্পর্কে জানে না - কেবল আপনার অ্যাডাপ্টারটি তা করে। এটি মূলত আইটেমের বিন্যাসের অংশটিকেই পূর্বে উপেক্ষা করা হয়েছিল inf


0

এটি আপনাকে ডিভাইডারের উচ্চতা যুক্ত করতে সহায়তা করবে।

 getListView().setDividerHeight(10)

আপনি যদি কোনও কাস্টম ভিউ যুক্ত করতে চান তবে আপনি তালিকার ভিউ আইটেমের বিন্যাসে একটি ছোট দর্শন যোগ করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.