Android এ শীর্ষস্থানীয় তালিকা আইটেমের উপরে (এবং শেষের নীচে) মার্জিন যুক্ত করুন


147

অ্যান্ড্রয়েডের তালিকাভিউতে আইটেমগুলির বিন্যাস সম্পর্কে এটি একটি দুর্দান্ত সূক্ষ্ম প্রশ্ন।

আমার শীর্ষে একটি শিরোনাম বার এবং একটি তালিকাভিউর বাকী পর্দা নিয়ে একটি ক্রিয়াকলাপ রয়েছে। আমি চাই যে আমার লিস্টভিউটি বাম, ডান এবং উপরে 10dp প্যাডিং সহ প্রদর্শিত হবে, তবে আপনি তালিকাভিউ উপরে স্ক্রোল করুন, আমি চাই যে এটি বিবর্ণ প্রান্তের নিচে অদৃশ্য হওয়ার আগে শীর্ষ 10 ডিপি প্যাডিংটি আবরণ করবে। একইভাবে, আপনি নীচে স্ক্রোল করার সময়, সর্বশেষ তালিকা আইটেমটি 10dp দিয়ে শেষ তালিকা আইটেমের নীচে এবং পর্দার আসল নীচের মাঝে উপস্থিত হওয়া উচিত (যদি আপনি ভাবছেন কেন, এটি কারণ এটি একটি সুন্দর পটভূমি চিত্র যা আমি চাই তালিকার চারপাশে ঝাঁকুনি দেওয়া)।

আমি নিজেই তালিকাভিউতে প্যাডিং যুক্ত করার চেষ্টা করেছি তবে আপনি তালিকাটি যখন স্ক্রোল করবেন তখন প্যাডিংয়ের প্রান্তে অদৃশ্য হয়ে যাবে।

আমি একটি ওয়েব ডেভ পটভূমি থেকে এসেছি এবং সাদৃশ্যটি হ'ল প্রথম তালিকা আইটেমের (এবং শেষের তালিকা আইটেমের নীচে) মার্জিন যুক্ত করা হবে।


কেবল বাম এবং ডান মার্জিন নির্দিষ্ট করুন ... আপনার এক্সএমএলটি এখানে পেস্ট করার চেষ্টা করুন, তাই আমি সমস্যাটি সম্পাদনা দেখতে পাচ্ছি: অপেক্ষা করুন, আপনি বোঝাচ্ছেন .... আপনি কি উপরের এবং নীচের প্যাডিংটিও স্ক্রল করতে চান?
টেক ইয়িন

আমি বাম এবং ডান মার্জিন নির্দিষ্ট করতে পারি না - অ্যান্ড্রয়েড লেআউটে কোনও 'মার্জিন' নেই, কেবল প্যাডিং। তবে, হ্যাঁ, আমি চাই উপরের এবং নীচের প্যাডগুলি স্ক্রোল করা হোক - এটি বর্ণনা করার জন্য এটি একটি ভাল উপায়।
মিক বাইরন

আমি ইতিমধ্যে বেশ কয়েকটি পদ্ধতি চেষ্টা করেছি, এবং এখনও ব্যর্থ হয়েছি .. আমার কিছু কৌশল আছে, তবে এটি করা আরও কঠিন হবে ... আপনি প্রথমে এবং শেষ অবস্থানে তালিকার আইটেমটিতে 2 টি কাস্টম অবজেক্ট রেখেছেন এবং এতে কাস্টম অ্যাডাপ্টার ব্যবহার করেন আইটেমটি সনাক্ত করুন এবং এটি আলাদাভাবে আঁকুন (সংকীর্ণ উচ্চতা এবং স্বচ্ছ)
টেক ইয়িন

হ্যাঁ ... এটাই আমি আবার পড়তে ভাবছিলাম। তবে এর সাথে সমস্ত ধরণের জটিলতা রয়েছে, কারণ আমি তালিকার আইটেমগুলিতে ব্যাকগ্রাউন্ডের রঙটি সেট করতে হবে, ভিউ নয়, যার অর্থ যখন আপনি জিনিসগুলি ট্যাপ করবেন তখন দেখানোর জন্য আমি নিজে কিছুটা হ্যাক করতে হবে । যাইহোক আপনার সহায়তার জন্য ধন্যবাদ ...
মিক বাইরন

সুসংবাদ .. আমি সমাধান পেয়েছি ... আপনি তালিকার ক্রিয়াকলাপে অ্যাডহিডারভিউ (ভি ভি) ব্যবহার করতে পারেন .. কেবল কল করুন getListView(). addHeaderView(capView)এবং getListView(). addHeaderView(botView) নিশ্চিত করুন যে তালিকার বিষয়বস্তু সূচনা করার আগে এটি বলা হয়েছিল eg setListAdapter (অ্যাডাপ্টার);
টেক ইয়িন

উত্তর:


397

তুমি লিখেছিলে:

আমি নিজেই তালিকাভিউতে প্যাডিং যুক্ত করার চেষ্টা করেছি তবে আপনি তালিকাটি যখন স্ক্রোল করবেন তখন প্যাডিংয়ের প্রান্তে অদৃশ্য হয়ে যাবে।

ListView's clipToPaddingএট্রিবিউট সেট করুন false। এটি চারপাশে প্যাডিং সক্ষম করবে ListView এবং বিন্যাসের শেষে (এবং কেবল প্যাডিংয়ের কিনারায় নয়) স্ক্রোলিং করবে ।

একটি উদাহরণ:

<ListView
    android:id="@+id/list_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="10.0sp"
    android:padding="16dip"
    android:clipToPadding="false"/>

android:clipToPaddingViewGroupলেআউট এবং ভিউ কনটেইনারগুলির জন্য বেস ক্লাসের একটি এক্সএমএল বৈশিষ্ট্য ।

সম্পর্কিত পদ্ধতি কলটি হল:

public void setClipToPadding (boolean clipToPadding)

4
অতিরিক্ত হিসাবে, এটি এর মাধ্যমে একটি স্টাইল বা থিম তৈরি করা যেতে পারে<item name="android:clipToPadding">false</item>
pjco

2
ওহ, এটি স্ক্রোলভিউতেও প্রযোজ্য
pjco

4
আলোচনার জন্য দেরি করে ফেলুন, তবে মনে রাখবেন যে পুরানো ডিভাইসে (আমি এটি প্রায় 2.3.x ডিভাইসগুলিতে স্পট করেছি), তালিকা আইটেমের ভিউগুলি খুব শীঘ্রই পুনর্ব্যবহার করা হবে। যখন অঙ্কন পর্বটি এটি সেখানে আঁকতে পারে জানে, লেআউট পর্বটি হয় না, সুতরাং এটি মনে করে আইটেমটি ইতিমধ্যে স্ক্রিন বন্ধ রয়েছে। স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 15915226/ … দেখুন ।
জেফ্রি ক্লার্ডি

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

5
ভুলে যাবেন না android:scrollbarStyle="outsideOverlay"যাতে স্ক্রোল বারটি পুরো প্যাডিংয়ের মধ্য দিয়ে যায়
jfcartier

19
View padding = new View(this);
padding.setHeight(20); // Can only specify in pixels unfortunately. No DIP :-(

ListView myListView = (ListView) findViewById(R.id.my_list_view);

myListView.addHeaderView(padding);
myListView.addFooterView(padding);

myListView.setAdapter(myAdapter);

উপরের লিস্টভিউতে 20 পিক্সেলের হেডার এবং পাদচরণ প্যাডিং থাকবে।


4
উত্তর করার জন্য ধন্যবাদ! দুর্দান্ত কাজ !! আপনি যদি ডিপিকে উচ্চতা রাখতে চান তবে এটি ডিসপ্লেমেট্রিক্স ব্যবহার করে করা যেতে পারে: float mDensity = getResources().getDisplayMetrics().density; int height = (int) (50 * mDensity + 0.5f); padding.setHeight(height);
টনি সেরালভা

3
বা আরও ভাল, জাভা স্তরে ডাইমনগুলি getRes উত্স () ব্যবহার করে ডাইমে পাবেন get
greg7gkb

1
বিকাশকারীদের সাইটে আমি যেগুলি শিখি তাদের বিরুদ্ধে স্ট্যাকওভারফ্লোতে আমি কী পরিমাণ অ্যান্ড্রয়েড স্টাফ শিখি তা দেখে সত্যিই অবাক হয়ে যায়
ট্রুকোক

1
বা আরও ভাল(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
Eugen Pechanec

1
এপিআই 23-তে দেখার জন্য কোনও "সেটহাইট ()" নেই Instead পরিবর্তে আমরা "সেটমিনিমামহাইট ()" ব্যবহার করতে পারি।
কেডব্লিউএ

10

@ জাকোবুদ এর উত্তরে সংযোজন ...

আমার তালিকাভিউ ইতিমধ্যে android:divider/android:dividerHeightবৈশিষ্ট্যগুলি তালিকাভিত্তিক আইটেমগুলির মধ্যে স্বচ্ছ ফাঁক তৈরি করতে ব্যবহার করছে। এটি আমাকে কেবলমাত্র android:headerDividersEnabledএবং android:footerDividersEnabledবৈশিষ্ট্যগুলি জুড়তে এবং এতে শিরোনাম এবং পাদচরণ দর্শন সেট করতে দেয় new View(Activity.this)

তালিকাভিউতে আপনার ইতিমধ্যে ডিভাইডার সেটআপ রয়েছে এমন ক্ষেত্রে সামান্য সরলকরণ।


1
আমি যেখানেই সম্ভব সেখানে আইটেম মার্জিন এবং প্যাডিংয়ের পরিবর্তে ডিভাইডার ব্যবহার করার পরামর্শ দেব। দুর্দান্ত উত্তর
dzsonni

2

ListFragment@ জাকোবুদ এবং @ গ্রেগ 7 জি কে বি দ্বারা সমাধানগুলির উপর ভিত্তি করে আমার দ্রবণটি একটি ব্যবহার করে ।

ListView listView = getListView();
listView.setDivider(null);
listView.setDividerHeight(getResources().getDimensionPixelSize(R.dimen.divider_height));
listView.setHeaderDividersEnabled(true);
listView.setFooterDividersEnabled(true);
View padding = new View(getActivity());
listView.addHeaderView(padding);
listView.addFooterView(padding);

1

@ গুন্নার কার্লসনের উত্তর ভাল, তবে পুরো প্যাডিংয়ের পেছনে সময় পূর্বে সেল ভিউগুলি পুনর্ব্যবহার করা হয়েছে তবে পুরোপুরি পর্দার বাইরে নেই। সেট clipToPadding = মিথ্যা এর জন্য দায়ী এবং নতুবা Android- এর ভবিষ্যতে সংস্করণে সংশোধন হতে পারে না। ( ListView এর আইটেম clipToPadding ব্যবহারের সময় অকালে পুনর্ব্যবহৃত )

পার্শ্ব প্রতিক্রিয়া ছাড়াই আমার একটি দুর্দান্ত সহজ সমাধান রয়েছে:

  1. আপনার সেল_ডিজাইন.এক্সএমএলে একটি বহিরাগত (লিনিয়ার বা সম্পর্কিত) লেআউট যুক্ত করুন
  2. এই বাইরের লেআউটে পুরো ঘরটির চারদিকে একটি "মার্জিন" তৈরি করতে প্যাডিং (অর্থাত্ 10 ডিপ) যুক্ত করুন। (কেবলমাত্র এনবি প্যাডিং কাজ করবে, বাইরের বিন্যাসে মার্জিন নয়)
  3. তালিকাভিউ সেটে android:dividerHeight="-10dip", ঘরের চারপাশে যা আছে তার বিপরীতে

অন্য উত্তরের তুলনায় ডিভাইডার রঙ সেট করার দরকার নেই। শীর্ষস্থানীয় এবং নীচেরতম কক্ষগুলির প্যাডিং উপস্থিত থাকবে এবং নেতিবাচক বিভাজক মাঝখানে দ্বিগুণ উচ্চতা বিভাজককে আটকাবে।


"কোনও পার্শ্ব প্রতিক্রিয়া ছাড়াই" এটি সম্পূর্ণ সত্য নয়। আপনার ভিউ হায়ারার্কিতে অন্য একটি স্তর যুক্ত করা, বিশেষত একটি তালিকার আইটেমটিতে অর্থ পারফর্মেন্সকে হ্রাস করা।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.