ভিউ মধ্যে লেআউট

রচনা পদ্ধতি চেষ্টা করুন
জেটপ্যাক কম্পোজ হল Android এর জন্য প্রস্তাবিত UI টুলকিট। কম্পোজে লেআউটের সাথে কীভাবে কাজ করবেন তা শিখুন।

একটি বিন্যাস আপনার অ্যাপের একটি ব্যবহারকারী ইন্টারফেসের কাঠামোকে সংজ্ঞায়িত করে, যেমন একটি কার্যকলাপে । লেআউটের সমস্ত উপাদান View এবং ViewGroup অবজেক্টের একটি শ্রেণিবিন্যাস ব্যবহার করে তৈরি করা হয়েছে। একটি View সাধারণত এমন কিছু আঁকে যা ব্যবহারকারী দেখতে এবং ইন্টারঅ্যাক্ট করতে পারে। একটি ViewGroup হল একটি অদৃশ্য ধারক যা View এবং অন্যান্য ViewGroup অবজেক্টের জন্য লেআউট গঠন সংজ্ঞায়িত করে, যেমনটি চিত্র 1 এ দেখানো হয়েছে।

চিত্র 1. একটি ভিউ অনুক্রমের চিত্র, যা একটি UI বিন্যাস সংজ্ঞায়িত করে।

View অবজেক্টগুলিকে প্রায়শই উইজেট বলা হয় এবং এটি Button বা TextView এর মতো অনেকগুলি উপশ্রেণীর মধ্যে একটি হতে পারে। ViewGroup অবজেক্টগুলিকে সাধারণত লেআউট বলা হয় এবং এটি অনেক ধরনের হতে পারে যা একটি ভিন্ন লেআউট কাঠামো প্রদান করে, যেমন LinearLayout বা ConstraintLayout

আপনি দুটি উপায়ে একটি বিন্যাস ঘোষণা করতে পারেন:

  • XML এ UI উপাদান ঘোষণা করুন। অ্যান্ড্রয়েড একটি সহজবোধ্য XML শব্দভাণ্ডার সরবরাহ করে যা View ক্লাস এবং সাবক্লাসগুলির সাথে মিলে যায়, যেমন উইজেট এবং লেআউটগুলির জন্য৷ আপনি একটি ড্র্যাগ-এন্ড-ড্রপ ইন্টারফেস ব্যবহার করে আপনার XML লেআউট তৈরি করতে অ্যান্ড্রয়েড স্টুডিওর লেআউট সম্পাদক ব্যবহার করতে পারেন।

  • রানটাইমে লেআউট উপাদানগুলিকে তাত্ক্ষণিক করুন। আপনার অ্যাপ View এবং ViewGroup অবজেক্ট তৈরি করতে পারে এবং তাদের প্রোপার্টিগুলিকে প্রোগ্রাম্যাটিকভাবে ম্যানিপুলেট করতে পারে।

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

অ্যান্ড্রয়েড ফ্রেমওয়ার্ক আপনাকে আপনার অ্যাপের UI তৈরি করতে এই পদ্ধতিগুলির একটি বা উভয়টি ব্যবহার করার নমনীয়তা দেয়৷ উদাহরণস্বরূপ, আপনি XML-এ আপনার অ্যাপের ডিফল্ট লেআউট ঘোষণা করতে পারেন এবং তারপর রানটাইমে লেআউট পরিবর্তন করতে পারেন।

XML লিখুন

অ্যান্ড্রয়েডের XML শব্দভান্ডার ব্যবহার করে, আপনি দ্রুত UI লেআউট এবং তাদের মধ্যে থাকা স্ক্রীন উপাদানগুলিকে ডিজাইন করতে পারেন, যেভাবে আপনি নেস্টেড উপাদানগুলির একটি সিরিজ দিয়ে HTML-এ ওয়েব পৃষ্ঠাগুলি তৈরি করেন৷

প্রতিটি লেআউট ফাইলে অবশ্যই একটি মূল উপাদান থাকতে হবে, যা অবশ্যই একটি View বা ViewGroup অবজেক্ট হতে হবে। আপনি মূল উপাদানটি সংজ্ঞায়িত করার পরে, আপনি অতিরিক্ত লেআউট অবজেক্ট বা উইজেটগুলিকে চাইল্ড এলিমেন্ট হিসাবে যুক্ত করতে পারেন যাতে আপনার লেআউটকে সংজ্ঞায়িত করে এমন একটি View অনুক্রম তৈরি করতে। উদাহরণস্বরূপ, এখানে একটি XML লেআউট রয়েছে যা একটি TextView এবং একটি Button ধরে রাখতে একটি উল্লম্ব LinearLayout ব্যবহার করে:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

আপনি XML-এ আপনার লেআউট ঘোষণা করার পরে, আপনার Android প্রকল্পের res/layout/ ডিরেক্টরিতে .xml এক্সটেনশনের সাথে ফাইলটি সংরক্ষণ করুন যাতে এটি সঠিকভাবে কম্পাইল হয়।

একটি লেআউট XML ফাইলের সিনট্যাক্স সম্পর্কে আরও তথ্যের জন্য, লেআউট রিসোর্স দেখুন।

XML রিসোর্স লোড করুন

আপনি যখন আপনার অ্যাপ কম্পাইল করেন, প্রতিটি XML লেআউট ফাইল একটি View রিসোর্সে কম্পাইল করা হয়। আপনার অ্যাপের Activity.onCreate() কলব্যাক বাস্তবায়নে লেআউট রিসোর্স লোড করুন। setContentView() কল করে, ফর্মটিতে আপনার লেআউট রিসোর্সের রেফারেন্স পাস করে এটি করুন: R.layout. layout_file_name । উদাহরণস্বরূপ, যদি আপনার XML লেআউট main_layout.xml হিসাবে সংরক্ষিত থাকে, তাহলে এটিকে আপনার Activity জন্য নিম্নরূপ লোড করুন:

কোটলিন

fun onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_layout)
}

জাভা

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
}

Activity চালু হলে অ্যান্ড্রয়েড ফ্রেমওয়ার্ক আপনার Activity onCreate() কলব্যাক পদ্ধতিতে কল করে। কার্যকলাপ জীবনচক্র সম্পর্কে আরও তথ্যের জন্য, কার্যকলাপের ভূমিকা দেখুন।

গুণাবলী

প্রতিটি View এবং ViewGroup অবজেক্ট তার নিজস্ব বিভিন্ন এক্সএমএল অ্যাট্রিবিউট সমর্থন করে। কিছু বৈশিষ্ট্য একটি View অবজেক্টের জন্য নির্দিষ্ট। উদাহরণস্বরূপ, TextView textSize অ্যাট্রিবিউট সমর্থন করে। যাইহোক, এই বৈশিষ্ট্যগুলি যে কোনও View অবজেক্টের দ্বারা উত্তরাধিকারসূত্রে পাওয়া যায় যা এই শ্রেণীকে প্রসারিত করে। কিছু সব View অবজেক্টের জন্য সাধারণ, কারণ সেগুলি id অ্যাট্রিবিউটের মতো রুট View ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। অন্যান্য বৈশিষ্ট্যগুলিকে লেআউট পরামিতি হিসাবে বিবেচনা করা হয়, যা এমন বৈশিষ্ট্য যা View অবজেক্টের নির্দিষ্ট লেআউট ওরিয়েন্টেশন বর্ণনা করে, যা সেই বস্তুর মূল ViewGroup অবজেক্ট দ্বারা সংজ্ঞায়িত করা হয়েছে।

আইডি

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

android:id="@+id/my_button"

স্ট্রিং এর শুরুতে at চিহ্ন (@) নির্দেশ করে যে XML পার্সার বাকি আইডি স্ট্রিংকে পার্স করে এবং প্রসারিত করে এবং এটিকে একটি আইডি রিসোর্স হিসেবে চিহ্নিত করে। প্লাস চিহ্ন (+) এর অর্থ হল এটি একটি নতুন রিসোর্স নাম যেটি তৈরি করতে হবে এবং R.java ফাইলে আপনার রিসোর্সে যোগ করতে হবে।

অ্যান্ড্রয়েড ফ্রেমওয়ার্ক অন্যান্য অনেক আইডি সংস্থান সরবরাহ করে। একটি অ্যান্ড্রয়েড রিসোর্স আইডি উল্লেখ করার সময়, আপনার প্লাস চিহ্নের প্রয়োজন নেই, তবে আপনাকে অবশ্যই android প্যাকেজ নামস্থানটি নিম্নরূপ যোগ করতে হবে:

android:id="@android:id/empty"

android প্যাকেজ নেমস্পেস নির্দেশ করে যে আপনি স্থানীয় রিসোর্স ক্লাসের পরিবর্তে android.R রিসোর্স ক্লাস থেকে একটি আইডি উল্লেখ করছেন।

ভিউ তৈরি করতে এবং আপনার অ্যাপ থেকে রেফারেন্স করতে, আপনি নিম্নরূপ একটি সাধারণ প্যাটার্ন ব্যবহার করতে পারেন:

  1. লেআউট ফাইলে একটি ভিউ সংজ্ঞায়িত করুন এবং এটিকে একটি অনন্য আইডি বরাদ্দ করুন, যেমন নিম্নলিখিত উদাহরণে:
    <Button android:id="@+id/my_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/my_button_text"/>
    
  2. ভিউ অবজেক্টের একটি উদাহরণ তৈরি করুন এবং লেআউট থেকে এটি ক্যাপচার করুন, সাধারণত onCreate() পদ্ধতিতে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

    কোটলিন

    val myButton: Button = findViewById(R.id.my_button)
    

    জাভা

    Button myButton = (Button) findViewById(R.id.my_button);
    

একটি RelativeLayout তৈরি করার সময় দৃশ্য অবজেক্টের জন্য আইডি সংজ্ঞায়িত করা গুরুত্বপূর্ণ। আপেক্ষিক লেআউটে, ভাইবোন ভিউ তাদের লেআউটকে অন্য ভাইবোন ভিউয়ের সাপেক্ষে সংজ্ঞায়িত করতে পারে, যা অনন্য আইডি দ্বারা উল্লেখ করা হয়।

একটি আইডি সমগ্র গাছ জুড়ে অনন্য হতে হবে না, কিন্তু এটি আপনার অনুসন্ধান করা গাছের অংশের মধ্যে অনন্য হতে হবে। এটি প্রায়শই পুরো গাছ হতে পারে, তাই যখন সম্ভব এটিকে অনন্য করা ভাল।

বিন্যাস পরামিতি

layout_ something নামের XML লেআউট বৈশিষ্ট্যগুলি View জন্য লেআউট প্যারামিটারগুলিকে সংজ্ঞায়িত করে যা এটি যে ViewGroup থাকে তার জন্য উপযুক্ত৷

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

চিত্র 2. প্রতিটি দৃশ্যের সাথে যুক্ত লেআউট পরামিতি সহ একটি ভিউ শ্রেণীবিন্যাসের ভিজ্যুয়ালাইজেশন।

মান নির্ধারণের জন্য প্রতিটি LayoutParams সাবক্লাসের নিজস্ব সিনট্যাক্স রয়েছে। প্রতিটি চাইল্ড এলিমেন্টকে অবশ্যই একটি LayoutParams সংজ্ঞায়িত করতে হবে যা তার পিতামাতার জন্য উপযুক্ত, যদিও এটি তার নিজের বাচ্চাদের জন্য একটি ভিন্ন LayoutParams সংজ্ঞায়িত করতে পারে।

layout_width এবং layout_height ব্যবহার করে সমস্ত ভিউ গ্রুপে একটি প্রস্থ এবং উচ্চতা অন্তর্ভুক্ত রয়েছে এবং প্রতিটি ভিউ তাদের সংজ্ঞায়িত করতে হবে। অনেক LayoutParams ঐচ্ছিক মার্জিন এবং সীমানা অন্তর্ভুক্ত করে।

আপনি সঠিক পরিমাপের সাথে প্রস্থ এবং উচ্চতা নির্দিষ্ট করতে পারেন, কিন্তু আপনি প্রায়শই এটি করতে চান না। প্রায়শই, আপনি প্রস্থ বা উচ্চতা সেট করতে এই ধ্রুবকগুলির মধ্যে একটি ব্যবহার করেন:

  • wrap_content : আপনার ভিউকে এর বিষয়বস্তুর জন্য প্রয়োজনীয় মাত্রার আকার দিতে বলে।
  • match_parent : আপনার দৃষ্টিভঙ্গিকে তার অভিভাবক ভিউ গ্রুপের অনুমতি দেওয়ার মতো বড় হতে বলে।

সাধারণভাবে, আমরা পিক্সেলের মতো পরম একক ব্যবহার করে লেআউটের প্রস্থ এবং উচ্চতা নির্দিষ্ট করার সুপারিশ করি না। একটি ভাল পদ্ধতি হল আপেক্ষিক পরিমাপ ব্যবহার করা, যেমন ঘনত্ব-স্বাধীন পিক্সেল ইউনিট (dp), wrap_content , বা match_parent , কারণ এটি আপনার অ্যাপকে বিভিন্ন ডিভাইসের স্ক্রীন আকারে সঠিকভাবে প্রদর্শন করতে সহায়তা করে। গৃহীত পরিমাপের প্রকারগুলি লেআউট সংস্থানে সংজ্ঞায়িত করা হয়েছে।

লেআউট অবস্থান

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

আপনি getLeft() এবং getTop() পদ্ধতিগুলি ব্যবহার করে একটি ভিউয়ের অবস্থান পুনরুদ্ধার করতে পারেন। পূর্ববর্তীটি দৃশ্যটি প্রতিনিধিত্বকারী আয়তক্ষেত্রের বাম ( x ) স্থানাঙ্ক প্রদান করে। পরবর্তীটি আয়তক্ষেত্রের উপরের ( y ) স্থানাঙ্কটি প্রদর্শন করে যা ভিউটি উপস্থাপন করে। এই পদ্ধতিগুলি তার পিতামাতার সাপেক্ষে ভিউটির অবস্থান ফিরিয়ে দেয়। উদাহরণস্বরূপ, যখন getLeft() 20 রিটার্ন করে, এর অর্থ হল ভিউটি তার সরাসরি প্যারেন্টের বাম প্রান্তের ডানদিকে 20 পিক্সেল অবস্থিত।

এছাড়াও, অপ্রয়োজনীয় গণনা এড়াতে সুবিধার পদ্ধতি রয়েছে: যথা getRight() এবং getBottom() । এই পদ্ধতিগুলি দৃশ্যের প্রতিনিধিত্বকারী আয়তক্ষেত্রের ডান এবং নীচের প্রান্তগুলির স্থানাঙ্কগুলি ফিরিয়ে দেয়। উদাহরণস্বরূপ, getRight() কল করা নিম্নলিখিত গণনার অনুরূপ: getLeft() + getWidth()

আকার, প্যাডিং এবং মার্জিন

একটি দৃশ্যের আকার একটি প্রস্থ এবং উচ্চতা দিয়ে প্রকাশ করা হয়। একটি দৃশ্য দুটি জোড়া প্রস্থ এবং উচ্চতা মান আছে.

প্রথম জোড়াটি পরিমাপিত প্রস্থ এবং পরিমাপিত উচ্চতা হিসাবে পরিচিত। এই মাত্রাগুলি নির্ধারণ করে যে একটি দৃশ্য তার পিতামাতার মধ্যে কতটা বড় হতে চায়৷ আপনি getMeasuredWidth() এবং getMeasuredHeight() কল করে পরিমাপ করা মাত্রা পেতে পারেন।

দ্বিতীয় জোড়াটি প্রস্থ এবং উচ্চতা হিসাবে পরিচিত, অথবা কখনও কখনও প্রস্থ এবং অঙ্কন উচ্চতা অঙ্কন করে। এই মাত্রাগুলি স্ক্রিনে দৃশ্যের প্রকৃত আকার নির্ধারণ করে, অঙ্কনের সময় এবং লেআউটের পরে। এই মানগুলি পরিমাপ করা প্রস্থ এবং উচ্চতা থেকে আলাদা হতে পারে, কিন্তু করতে হবে না। আপনি getWidth() এবং getHeight() কল করে প্রস্থ এবং উচ্চতা পেতে পারেন।

এর মাত্রা পরিমাপ করতে, একটি দৃশ্য তার প্যাডিংকে বিবেচনা করে। দৃশ্যের বাম, উপরে, ডান এবং নীচের অংশগুলির জন্য প্যাডিংটি পিক্সেলে প্রকাশ করা হয়। আপনি একটি নির্দিষ্ট সংখ্যক পিক্সেল দ্বারা দৃশ্যের বিষয়বস্তু অফসেট করতে প্যাডিং ব্যবহার করতে পারেন। উদাহরণস্বরূপ, দুটির একটি বাম প্যাডিং দৃশ্যের বিষয়বস্তুকে বাম প্রান্তের ডানদিকে দুই পিক্সেল ঠেলে দেয়। আপনি setPadding(int, int, int, int) পদ্ধতি ব্যবহার করে প্যাডিং সেট করতে পারেন এবং getPaddingLeft() , getPaddingTop() , getPaddingRight() , এবং getPaddingBottom() এ কল করে এটিকে জিজ্ঞাসা করতে পারেন।

যদিও একটি দৃশ্য একটি প্যাডিং সংজ্ঞায়িত করতে পারে, এটি মার্জিন সমর্থন করে না। যাইহোক, ভিউ গ্রুপ মার্জিন সমর্থন করে। আরও তথ্যের জন্য ViewGroup এবং ViewGroup.MarginLayoutParams দেখুন।

মাত্রা সম্পর্কে আরও তথ্যের জন্য, মাত্রা দেখুন।

মার্জিন এবং প্যাডিং প্রোগ্রামগতভাবে সেট করার পাশাপাশি, আপনি সেগুলিকে আপনার XML লেআউটে সেট করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
      <TextView android:id="@+id/text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="16dp"
                android:padding="8dp"
                android:text="Hello, I am a TextView" />
      <Button android:id="@+id/button"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginTop="16dp"
              android:paddingBottom="4dp"
              android:paddingEnd="8dp"
              android:paddingStart="8dp"
              android:paddingTop="4dp"
              android:text="Hello, I am a Button" />
  </LinearLayout>
  

পূর্ববর্তী উদাহরণ মার্জিন এবং প্যাডিং প্রয়োগ করা দেখায়। TextView চারদিকে অভিন্ন মার্জিন এবং প্যাডিং প্রয়োগ করা হয়েছে এবং Button দেখায় কিভাবে আপনি বিভিন্ন প্রান্তে স্বাধীনভাবে প্রয়োগ করতে পারেন।

সাধারণ লেআউট

ViewGroup ক্লাসের প্রতিটি সাবক্লাস একটি অনন্য উপায় প্রদান করে যা আপনি এটির মধ্যে নেস্ট করেন এমন দৃশ্যগুলি প্রদর্শন করার জন্য। সবচেয়ে নমনীয় লেআউটের ধরন, এবং যেটি আপনার লেআউট শ্রেণিবিন্যাসকে অগভীর রাখার জন্য সর্বোত্তম সরঞ্জাম সরবরাহ করে তা হল ConstraintLayout

Android প্ল্যাটফর্মে তৈরি কিছু সাধারণ লেআউটের ধরন নিচে দেওয়া হল।

একটি লিনিয়ার লেআউট তৈরি করুন

এর বাচ্চাদের একটি একক অনুভূমিক বা উল্লম্ব সারিতে সংগঠিত করে এবং একটি স্ক্রলবার তৈরি করে যদি উইন্ডোর দৈর্ঘ্য পর্দার দৈর্ঘ্য অতিক্রম করে।

WebView এ ওয়েব অ্যাপস তৈরি করুন

ওয়েব পৃষ্ঠাগুলি প্রদর্শন করে।

গতিশীল তালিকা তৈরি করুন

যখন আপনার লেআউটের বিষয়বস্তু গতিশীল হয় বা পূর্ব-নির্ধারিত না থাকে, তখন আপনি RecyclerView বা AdapterView এর একটি সাবক্লাস ব্যবহার করতে পারেন। RecyclerView সাধারণত ভাল বিকল্প, কারণ এটি AdapterView এর চেয়ে মেমরি বেশি দক্ষতার সাথে ব্যবহার করে।

RecyclerView এবং AdapterView এর সাথে সম্ভাব্য সাধারণ লেআউটগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

তালিকা

একটি স্ক্রলিং একক কলাম তালিকা প্রদর্শন করে।

গ্রিড

কলাম এবং সারিগুলির একটি স্ক্রলিং গ্রিড প্রদর্শন করে।

RecyclerView আরও সম্ভাবনা এবং একটি কাস্টম লেআউট ম্যানেজার তৈরি করার বিকল্প অফার করে৷

ডেটা দিয়ে একটি অ্যাডাপ্টার ভিউ পূরণ করুন

আপনি AdapterView ইনস্ট্যান্সকে Adapter সাথে আবদ্ধ করে ListView বা GridView এর মতো একটি AdapterView তৈরি করতে পারেন, যা একটি বাহ্যিক উত্স থেকে ডেটা পুনরুদ্ধার করে এবং একটি View তৈরি করে যা প্রতিটি ডেটা এন্ট্রিকে উপস্থাপন করে৷

অ্যান্ড্রয়েড Adapter বেশ কয়েকটি সাবক্লাস সরবরাহ করে যা বিভিন্ন ধরণের ডেটা পুনরুদ্ধার করতে এবং AdapterView জন্য ভিউ তৈরি করতে কার্যকর। দুটি সবচেয়ে সাধারণ অ্যাডাপ্টার হল:

ArrayAdapter
আপনার ডেটা উত্স একটি অ্যারে হলে এই অ্যাডাপ্টারটি ব্যবহার করুন৷ ডিফল্টরূপে, ArrayAdapter প্রতিটি আইটেমের toString() কল করে এবং একটি TextView এ বিষয়বস্তু স্থাপন করে প্রতিটি অ্যারে আইটেমের জন্য একটি দৃশ্য তৈরি করে।

উদাহরণস্বরূপ, যদি আপনার কাছে স্ট্রিংগুলির একটি অ্যারে থাকে যা আপনি একটি ListView এ প্রদর্শন করতে চান, প্রতিটি স্ট্রিং এবং স্ট্রিং অ্যারের জন্য বিন্যাস নির্দিষ্ট করতে একটি কনস্ট্রাক্টর ব্যবহার করে একটি নতুন ArrayAdapter শুরু করুন:

কোটলিন

    val adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myStringArray)
    

জাভা

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, myStringArray);
    

এই কনস্ট্রাক্টরের জন্য আর্গুমেন্টগুলি নিম্নরূপ:

  • আপনার অ্যাপ Context
  • বিন্যাসের মধ্যে প্রতিটি স্ট্রিংয়ের জন্য একটি TextView রয়েছে
  • স্ট্রিং অ্যারে

তারপর আপনার ListViewsetAdapter() কল করুন:

কোটলিন

    val listView: ListView = findViewById(R.id.listview)
    listView.adapter = adapter
    

জাভা

    ListView listView = (ListView) findViewById(R.id.listview);
    listView.setAdapter(adapter);
    

প্রতিটি আইটেমের চেহারা কাস্টমাইজ করতে আপনি আপনার অ্যারের অবজেক্টের জন্য toString() পদ্ধতিটি ওভাররাইড করতে পারেন। অথবা, প্রতিটি আইটেমের জন্য একটি ভিউ তৈরি করতে যা একটি TextView ছাড়া অন্য কিছু—উদাহরণস্বরূপ, আপনি যদি প্রতিটি অ্যারে আইটেমের জন্য একটি ImageView চান— ArrayAdapter ক্লাস প্রসারিত করুন এবং প্রতিটি আইটেমের জন্য আপনি যে ধরনের ভিউ চান তা ফেরাতে getView() ওভাররাইড করুন।

SimpleCursorAdapter
যখন আপনার ডেটা Cursor থেকে আসে তখন এই অ্যাডাপ্টারটি ব্যবহার করুন। SimpleCursorAdapter ব্যবহার করার সময়, Cursor প্রতিটি সারির জন্য ব্যবহার করার জন্য একটি লেআউট নির্দিষ্ট করুন এবং Cursor কোন কলামগুলি আপনি চান সেই লেআউটের ভিউতে সন্নিবেশ করতে চান। উদাহরণস্বরূপ, আপনি যদি লোকেদের নাম এবং ফোন নম্বরগুলির একটি তালিকা তৈরি করতে চান, তাহলে আপনি একটি কোয়েরি সম্পাদন করতে পারেন যা প্রতিটি ব্যক্তির জন্য একটি সারি এবং নাম এবং নম্বরগুলির জন্য কলাম সমন্বিত একটি Cursor প্রদান করে৷ তারপরে আপনি প্রতিটি ফলাফলের জন্য লেআউটে Cursor থেকে কোন কলামগুলি চান তা নির্দিষ্ট করে একটি স্ট্রিং অ্যারে তৈরি করুন এবং প্রতিটি কলামে স্থাপন করা প্রয়োজন এমন সংশ্লিষ্ট দৃশ্যগুলি নির্দিষ্ট করে একটি পূর্ণসংখ্যা অ্যারে তৈরি করুন:

কোটলিন

    val fromColumns = arrayOf(ContactsContract.Data.DISPLAY_NAME,
                              ContactsContract.CommonDataKinds.Phone.NUMBER)
    val toViews = intArrayOf(R.id.display_name, R.id.phone_number)
    

জাভা

    String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
                            ContactsContract.CommonDataKinds.Phone.NUMBER};
    int[] toViews = {R.id.display_name, R.id.phone_number};
    

আপনি যখন SimpleCursorAdapter ইনস্ট্যান্টিয়েট করেন, প্রতিটি ফলাফলের জন্য ব্যবহার করার জন্য লেআউটটি পাস করুন, ফলাফল ধারণকারী Cursor , এবং এই দুটি অ্যারে:

কোটলিন

    val adapter = SimpleCursorAdapter(this,
            R.layout.person_name_and_number, cursor, fromColumns, toViews, 0)
    val listView = getListView()
    listView.adapter = adapter
    

জাভা

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
    ListView listView = getListView();
    listView.setAdapter(adapter);
    

SimpleCursorAdapter তারপরে প্রদত্ত লেআউট ব্যবহার করে Cursor প্রতিটি সারির জন্য একটি ভিউ তৈরি করে যার মাধ্যমে প্রতিটি fromColumns আইটেমটি toViews ভিউতে সন্নিবেশ করান।

যদি আপনার অ্যাপের জীবনের সময় আপনি আপনার অ্যাডাপ্টারের দ্বারা পড়া অন্তর্নিহিত ডেটা পরিবর্তন করেন, তাহলে notifyDataSetChanged() কল করুন। এটি সংযুক্ত ভিউকে সূচিত করে যে ডেটা পরিবর্তন করা হয়েছে এবং এটি নিজেকে রিফ্রেশ করে।

ক্লিক ইভেন্টগুলি পরিচালনা করুন

আপনি AdapterView.OnItemClickListener ইন্টারফেস প্রয়োগ করে একটি AdapterView এ প্রতিটি আইটেমের ক্লিক ইভেন্টে প্রতিক্রিয়া জানাতে পারেন। যেমন:

কোটলিন

listView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
    // Do something in response to the click.
}

জাভা

// Create a message handling object as an anonymous class.
private OnItemClickListener messageClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        // Do something in response to the click.
    }
};

listView.setOnItemClickListener(messageClickedHandler);

অতিরিক্ত সম্পদ

GitHub-এ সানফ্লাওয়ার ডেমো অ্যাপে লেআউটগুলি কীভাবে ব্যবহার করা হয় তা দেখুন।