অ্যান্ড্রয়েড কোটলিন ফান্ডামেন্টালস 01.2: বেসিক অ্যাপ অ্যানাটমি

এই কোডল্যাবটি অ্যান্ড্রয়েড কোটলিন ফান্ডামেন্টাল কোর্সের অংশ। আপনি যদি ক্রমানুসারে কোডল্যাবগুলির মাধ্যমে কাজ করেন তবে আপনি এই কোর্সের সর্বাধিক মূল্য পাবেন৷ সমস্ত কোর্স কোডল্যাব অ্যান্ড্রয়েড কোটলিন ফান্ডামেন্টাল কোডল্যাব ল্যান্ডিং পৃষ্ঠায় তালিকাভুক্ত করা হয়েছে।

ভূমিকা

এই পর্যন্ত আপনি সবকিছু সেট আপ করেছেন এবং অ্যান্ড্রয়েড স্টুডিও আপনার জন্য অনেক কোড তৈরি করেছে। আপনি সেই সমস্ত কোড পরিবর্তন করার আগে, আপনি এইমাত্র কী তৈরি করেছেন এবং একটি Android অ্যাপের সোর্স ফাইলগুলি কীভাবে নেভিগেট করবেন তা জানা গুরুত্বপূর্ণ৷

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

আপনি ইতিমধ্যে কি জানা উচিত

  • কীভাবে অ্যান্ড্রয়েড স্টুডিও ইনস্টল এবং খুলবেন।
  • কীভাবে একটি নতুন অ্যাপ প্রকল্প তৈরি করবেন।
  • কিভাবে একটি এমুলেটর বা একটি শারীরিক ডিভাইসে একটি অ্যাপ চালাবেন।

আপনি কি শিখবেন

  • অ্যাপের লেআউট ফাইল কিভাবে এডিট করবেন।
  • ইন্টারেক্টিভ আচরণ সহ একটি অ্যাপ কীভাবে তৈরি করবেন।
  • অনেক নতুন পরিভাষা। শর্তাবলী এবং ধারণার বন্ধুত্বপূর্ণ ব্যাখ্যার জন্য শব্দভান্ডার শব্দকোষটি দেখুন।

আপনি কি করবেন

  • MainActivity Kotlin ফাইল এবং কার্যকলাপের বিন্যাস ফাইলটি অন্বেষণ করুন৷
  • XML-এ কার্যকলাপের বিন্যাস সম্পাদনা করুন।
  • কার্যকলাপের বিন্যাসে একটি Button উপাদান যোগ করুন।
  • স্ট্রিং সংস্থানগুলির একটি ফাইলে হার্ডকোডেড স্ট্রিংগুলি বের করুন৷
  • ব্যবহারকারী যখন একটি Button ট্যাপ করে তখন স্ক্রিনে বার্তা প্রদর্শন করতে ক্লিক-হ্যান্ডলার পদ্ধতি প্রয়োগ করুন।

এই কোডল্যাবে, আপনি DiceRoller নামে একটি নতুন অ্যাপ প্রকল্প তৈরি করুন এবং একটি বোতামের সাহায্যে মৌলিক ইন্টারঅ্যাক্টিভিটি যোগ করুন। প্রতিবার বোতামটি ক্লিক করা হলে, প্রদর্শিত পাঠ্যের মান পরিবর্তিত হয়। এই কোডল্যাবের জন্য চূড়ান্ত DiceRoller অ্যাপটি দেখতে এইরকম:

শেষ কোডল্যাবে, আপনি java এবং res ডিরেক্টরি সহ একটি অ্যাপ প্রকল্পের প্রধান অংশ সম্পর্কে শিখেছেন। এই কাজটিতে, আপনি দুটি সবচেয়ে গুরুত্বপূর্ণ ফাইলের উপর ফোকাস করেন যা আপনার অ্যাপ তৈরি করে: MainActivity Kotlin ফাইল এবং activity_main.xml লেআউট ফাইল।

ধাপ 1: প্রধান কার্যকলাপ পরীক্ষা করুন

MainActivity হল একটি Activity উদাহরণ। Activity হল একটি মূল অ্যান্ড্রয়েড ক্লাস যা একটি অ্যান্ড্রয়েড অ্যাপ ইউজার ইন্টারফেস (UI) আঁকে এবং ইনপুট ইভেন্ট গ্রহণ করে। আপনার অ্যাপ চালু হলে, এটি AndroidManifest.xml ফাইলে নির্দিষ্ট করা কার্যকলাপ চালু করে।

অনেক প্রোগ্রামিং ভাষা একটি প্রধান পদ্ধতি সংজ্ঞায়িত করে যা প্রোগ্রাম শুরু করে। অ্যান্ড্রয়েড অ্যাপের কোনো প্রধান পদ্ধতি নেই। পরিবর্তে, AndroidManifest.xml ফাইলটি নির্দেশ করে যে ব্যবহারকারী যখন অ্যাপের লঞ্চার আইকনে ট্যাপ করে তখন MainActivity চালু করা উচিত। একটি কার্যকলাপ চালু করতে, Android OS অ্যাপের জন্য পরিবেশ সেট আপ করতে এবং MainActivity তৈরি করতে ম্যানিফেস্টে থাকা তথ্য ব্যবহার করে৷ তারপর MainActivity পালাক্রমে কিছু সেটআপ করে।

প্রতিটি ক্রিয়াকলাপের একটি সংশ্লিষ্ট লেআউট ফাইল রয়েছে। কার্যকলাপ এবং বিন্যাস একটি প্রক্রিয়া দ্বারা সংযুক্ত করা হয় যা লেআউট মুদ্রাস্ফীতি নামে পরিচিত। যখন কার্যকলাপ শুরু হয়, XML লেআউট ফাইলগুলিতে সংজ্ঞায়িত দৃশ্যগুলি মেমরিতে Kotlin ভিউ অবজেক্টে পরিণত হয় (বা "স্ফীত")। একবার এটি ঘটলে, কার্যকলাপ এই বস্তুগুলিকে স্ক্রিনে আঁকতে পারে এবং গতিশীলভাবে তাদের পরিবর্তন করতে পারে।

  1. অ্যান্ড্রয়েড স্টুডিওতে, একটি নতুন প্রকল্প তৈরি করতে ফাইল > নতুন > নতুন প্রকল্প নির্বাচন করুন। খালি কার্যকলাপ ব্যবহার করুন এবং পরবর্তী ক্লিক করুন।
  2. প্রজেক্টকে কল করুন DiceRoller , এবং প্রজেক্ট নামের প্রজেক্টের অবস্থানের জন্য অন্য সব মান যাচাই করুন। নিশ্চিত করুন যে "AndroidX আর্টিফ্যাক্ট ব্যবহার করুন" চেক করা আছে। শেষ ক্লিক করুন.


  3. প্রজেক্ট > Android প্যানে, java > com.example.android.diceroller প্রসারিত করুন। MainActivity-এ ডাবল-ক্লিক করুন। কোড এডিটর MainActivity কোড দেখায়।


  4. প্যাকেজের নাম এবং ইম্পোর্ট স্টেটমেন্টের নিচে MainActivity জন্য ক্লাস ডিক্লারেশন আছে। MainActivity ক্লাস AppCompatActivity প্রসারিত করে।
class MainActivity : AppCompatActivity() { ...
  1. onCreate() পদ্ধতি লক্ষ্য করুন। ক্রিয়াকলাপগুলি অবজেক্ট শুরু করার জন্য একটি কন্সট্রাক্টর ব্যবহার করে না। পরিবর্তে, পূর্বনির্ধারিত পদ্ধতির একটি সিরিজ (যাকে "জীবনচক্র পদ্ধতি" বলা হয়) কার্যকলাপ সেটআপের অংশ হিসাবে বলা হয়। এই জীবনচক্র পদ্ধতিগুলির মধ্যে একটি হল onCreate() , যা আপনি সর্বদা আপনার নিজের অ্যাপে ওভাররাইড করেন। আপনি পরবর্তী কোডল্যাবে জীবনচক্র পদ্ধতি সম্পর্কে আরও শিখবেন।

    onCreate() তে, আপনি নির্দিষ্ট করেন কোন লেআউটটি কার্যকলাপের সাথে যুক্ত, এবং আপনি লেআউটটি স্ফীত করেন। setContentView() পদ্ধতি এই দুটি জিনিস করে।
override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)
}

setContentView() পদ্ধতিটি R.layout.activity_main ব্যবহার করে লেআউটের উল্লেখ করে, যা আসলে একটি পূর্ণসংখ্যা রেফারেন্স। আপনি যখন আপনার অ্যাপ তৈরি করেন তখন R ক্লাস তৈরি হয়। R ক্লাসে res ডিরেক্টরির বিষয়বস্তু সহ অ্যাপের সমস্ত সম্পদ অন্তর্ভুক্ত থাকে।

এই ক্ষেত্রে, R.layout.activity_main বলতে জেনারেট করা R ক্লাস, layout ফোল্ডার এবং activity_main.xml লেআউট ফাইল বোঝায়। (সম্পদ ফাইল এক্সটেনশন অন্তর্ভুক্ত করে না।) আপনি R ক্লাসে অনুরূপ রেফারেন্স ব্যবহার করে অ্যাপের অনেক সম্পদ (ছবি, স্ট্রিং এবং লেআউট ফাইলের মধ্যে উপাদান সহ) উল্লেখ করবেন।

ধাপ 2: অ্যাপ লেআউট ফাইলটি পরীক্ষা করুন এবং অন্বেষণ করুন

আপনার অ্যাপের সমস্ত ক্রিয়াকলাপের অ্যাপের res/layout ডিরেক্টরিতে একটি সংশ্লিষ্ট লেআউট ফাইল রয়েছে। একটি লেআউট ফাইল হল একটি XML ফাইল যা প্রকাশ করে যে একটি কার্যকলাপ আসলে কেমন দেখায়। একটি বিন্যাস ফাইল দৃশ্যগুলি সংজ্ঞায়িত করে এবং পর্দায় দৃশ্যগুলি কোথায় প্রদর্শিত হবে তা নির্ধারণ করে এটি করে।

ভিউ হল টেক্সট, ইমেজ এবং বোতামের মতো জিনিস যা View ক্লাসকে প্রসারিত করে। TextView , Button , ImageView এবং CheckBox সহ অনেক ধরণের ভিউ রয়েছে।

এই টাস্কে, আপনি অ্যাপ লেআউট ফাইলটি পরীক্ষা করে পরিবর্তন করেন।

  1. প্রজেক্ট > অ্যান্ড্রয়েড প্যানে, res > লেআউট প্রসারিত করুন এবং activity_main.xml-এ ডাবল-ক্লিক করুন। লেআউট ডিজাইন এডিটর খোলে। অ্যান্ড্রয়েড স্টুডিওতে এই সম্পাদক রয়েছে, যা আপনাকে আপনার অ্যাপের লেআউটটি ভিজ্যুয়াল উপায়ে তৈরি করতে এবং লেআউট ডিজাইনের পূর্বরূপ দেখতে দেয়। আপনি পরবর্তী কোডল্যাবে ডিজাইন এডিটর সম্পর্কে আরও জানুন।
  2. লেআউট ফাইলটিকে XML হিসাবে দেখতে, উইন্ডোর নীচে পাঠ্য ট্যাবে ক্লিক করুন।


  3. লেআউট সম্পাদকে বিদ্যমান সমস্ত XML কোড মুছুন। আপনি যদি অ্যান্ড্রয়েড স্টুডিও ডিজাইন এডিটরের সাথে কাজ করেন তবে একটি নতুন প্রজেক্টের সাথে আপনি যে ডিফল্ট লেআউট পাবেন তা একটি ভাল সূচনা পয়েন্ট। এই পাঠের জন্য আপনি স্ক্র্যাচ থেকে একটি নতুন লেআউট তৈরি করতে অন্তর্নিহিত XML এর সাথে কাজ করবেন।
  4. লেআউটে এই কোডটি কপি এবং পেস্ট করুন:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout   
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</LinearLayout>

এখন কোড পরীক্ষা করুন:

  1. লেআউটের শীর্ষ-স্তরের বা মূল উপাদান হল একটি <LinearLayout> উপাদান। LinearLayout ভিউ হল একটি ViewGroup । ভিউ গ্রুপগুলি এমন কন্টেইনার যা অন্যান্য ভিউ ধরে রাখে এবং স্ক্রিনে ভিউগুলির অবস্থান নির্দিষ্ট করতে সাহায্য করে।

    আপনি আপনার লেআউটে যে সমস্ত ভিউ এবং ভিউ গ্রুপগুলি যোগ করেন সেগুলি একটি ভিউ হায়ারার্কিতে সংগঠিত হয়, সেই হায়ারার্কির মূল হিসাবে শীর্ষস্থানীয় XML এলিমেন্ট। রুট ভিউতে অন্যান্য ভিউ এবং ভিউ গ্রুপ থাকতে পারে এবং ধারণ করা ভিউ গ্রুপে অন্যান্য ভিউ এবং ভিউ গ্রুপ থাকতে পারে। যখন আপনার অ্যাপটি আপনার XML লেআউট ফাইলে ভিউ হায়ারার্কি চালায় তখন লেআউটটি স্ফীত হলে অবজেক্টের একটি শ্রেণীবিন্যাস হয়ে যায়। এই ক্ষেত্রে রুট ভিউ গ্রুপ হল একটি রৈখিক বিন্যাস, যা তার চাইল্ড ভিউগুলিকে একের পর এক (উল্লম্বভাবে বা অনুভূমিকভাবে) সংগঠিত করে।

    একটি নতুন অ্যান্ড্রয়েড প্রজেক্টের জন্য আপনি যে ডিফল্ট রুটটি পাবেন তা হল একটি ConstraintLayout , যা ডিজাইন এডিটরের সাথে সমন্বয় করে কাজ করে। এই অ্যাপের জন্য, আপনি একটি LinearLayout ভিউ গ্রুপ ব্যবহার করেন, যা সীমাবদ্ধতার লেআউটের চেয়ে সহজ। আপনি পরবর্তী পাঠে ভিউ গ্রুপ এবং সীমাবদ্ধতা লেআউট সম্পর্কে আরও অনেক কিছু শিখবেন।
  2. LinearLayout ট্যাগের ভিতরে, android:layout_width বৈশিষ্ট্যটি লক্ষ্য করুন। এই LinearLayout এর প্রস্থ match parent জন্য সেট করা হয়েছে, যা এটিকে তার অভিভাবকের মতো একই প্রস্থ করে তোলে। যেহেতু এটি রুট ভিউ, লেআউটটি স্ক্রিনের সম্পূর্ণ প্রস্থে প্রসারিত হয়।
  3. android:layout_height অ্যাট্রিবিউটটি লক্ষ্য করুন, যা wrap_content এ সেট করা আছে। এই বৈশিষ্ট্যটি LinearLayout এর উচ্চতাকে এতে থাকা সমস্ত দর্শনের সম্মিলিত উচ্চতার সাথে মেলে, যা আপাতত শুধুমাত্র TextView
  4. <TextView> উপাদান পরীক্ষা করুন। এই TextView , যা পাঠ্য প্রদর্শন করে, আপনার DiceRoller অ্যাপের একমাত্র ভিজ্যুয়াল উপাদান। android:text অ্যাট্রিবিউটটি প্রদর্শনের জন্য প্রকৃত স্ট্রিং ধারণ করে, এই ক্ষেত্রে "Hello World!"
  5. <TextView> উপাদানে android:layout_width এবং android:layout_height বৈশিষ্ট্যগুলি লক্ষ্য করুন, যেগুলি উভয়ই wrap_content এ সেট করা আছে। টেক্সট ভিউ এর বিষয়বস্তু হল টেক্সট, তাই ভিউ শুধুমাত্র টেক্সটের জন্য প্রয়োজনীয় স্থান গ্রহণ করবে।

ডাইস-রোলিং অ্যাপটি ব্যবহারকারীর জন্য পাশা রোল করার এবং তারা কী ঘূর্ণায়মান করেছে তা দেখার উপায় ছাড়া খুব কার্যকর নয়। শুরু করতে, ডাইস রোল করার জন্য লেআউটে একটি বোতাম যোগ করুন এবং ব্যবহারকারীর রোল করা ডাইস মান দেখায় এমন পাঠ্য যোগ করুন।

ধাপ 1: লেআউটে একটি বোতাম যোগ করুন

  1. <Button প্রবেশ করে পাঠ্য দৃশ্যের নীচে লেআউটে একটি Button উপাদান যুক্ত করুন এবং তারপরে রিটার্ন টিপুন। একটি Button ব্লক প্রদর্শিত হয় যা /> দিয়ে শেষ হয় এবং layout_width এবং layout_height বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে।
<Button
   android:layout_width=""
   android:layout_height="" />
  1. layout_width এবং layout_height উভয় বৈশিষ্ট্যই "wrap_content" এ সেট করুন। এই মানগুলির সাথে বোতামটি টেক্সট লেবেলের মতো একই প্রস্থ এবং উচ্চতা।
  2. বোতামটিতে একটি android:text অ্যাট্রিবিউট যোগ করুন এবং এটিকে "Rol" এর একটি মান দিন। বোতাম উপাদান এখন এই মত দেখায়:
<Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Roll" />


Button দেখার জন্য text অ্যাট্রিবিউট হল বোতামের লেবেল। লেআউট সম্পাদকে, বৈশিষ্ট্যটি হলুদ রঙে হাইলাইট করা হয়, যা একটি টিপ বা সতর্কতা নির্দেশ করে। এই ক্ষেত্রে, হলুদ হাইলাইটিং হল কারণ স্ট্রিং "Roll" বোতাম লেবেলে হার্ডকোড করা হয়েছে, কিন্তু স্ট্রিংটি একটি সম্পদ হওয়া উচিত। আপনি পরবর্তী বিভাগে স্ট্রিং সংস্থান সম্পর্কে শিখবেন।

ধাপ 2: স্ট্রিং রিসোর্স বের করুন

আপনার লেআউট বা কোড ফাইলগুলিতে হার্ডকোডিং স্ট্রিংগুলির পরিবর্তে, আপনার সমস্ত অ্যাপ স্ট্রিংগুলিকে একটি পৃথক ফাইলে রাখা একটি সেরা অনুশীলন৷ এই ফাইলটিকে বলা হয় strings.xml , এবং এটি res/values/ ডিরেক্টরিতে অ্যাপের সংস্থানগুলির মধ্যে অবস্থিত৷

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

অ্যান্ড্রয়েড স্টুডিও আপনাকে ইঙ্গিত এবং সতর্কতা সহ একটি রিসোর্স ফাইলে আপনার স্ট্রিংগুলি রাখার কথা মনে রাখতে সাহায্য করে৷

  1. <Button> ট্যাগের android:text এট্রিবিউটে "Rol" স্ট্রিংটিতে একবার ক্লিক করুন।
  2. Alt+Enter টিপুন ( macOS-এ Option+Enter ) এবং পপআপ মেনু থেকে Extract স্ট্রিং রিসোর্স নির্বাচন করুন।
  3. সম্পদ নামের জন্য roll_label লিখুন।
  4. ওকে ক্লিক করুন। res/values/string.xml ফাইলে একটি স্ট্রিং রিসোর্স তৈরি করা হয় এবং বোতাম এলিমেন্টের স্ট্রিংটি সেই রিসোর্সের রেফারেন্স দিয়ে প্রতিস্থাপিত হয়:
    android:text="@string/roll_label"
  5. প্রজেক্ট > অ্যান্ড্রয়েড প্যানে, res > মানগুলি প্রসারিত করুন এবং তারপর strings.xml ফাইলে আপনার স্ট্রিং সংস্থানগুলি দেখতে strings.xml এ ডাবল-ক্লিক করুন:
<resources>
   <string name="app_name">DiceRoller</string>
   <string name="roll_label">Roll</string>
</resources>

ধাপ 3: শৈলী এবং অবস্থানের দৃশ্য

আপনার লেআউটে এখন একটি TextView এবং একটি Button ভিউ রয়েছে৷ এই টাস্কে, আপনি ভিউ গ্রুপের ভিউগুলিকে আরও আকর্ষণীয় দেখাতে সাজান।

  1. লেআউটের পূর্বরূপ দেখতে ডিজাইন ট্যাবে ক্লিক করুন। এই মুহূর্তে উভয় ভিউ একে অপরের পাশে এবং স্ক্রিনের উপরের দিকে ঠেলে দেওয়া হয়েছে।


  2. XML সম্পাদকে ফিরে যেতে পাঠ্য ট্যাবে ক্লিক করুন। LinearLayout ট্যাগে android:orientation অ্যাট্রিবিউট যোগ করুন এবং এটিকে "vertical" এর একটি মান দিন। <LinearLayout> উপাদানটি এখন এইরকম হওয়া উচিত:
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   tools:context=".MainActivity">

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

  1. TextView এবং Button উভয়টিতে android:layout_gravity অ্যাট্রিবিউট যোগ করুন এবং এটিকে "center_horizontal" মান দিন। এটি অনুভূমিক অক্ষের কেন্দ্র বরাবর উভয় দৃশ্যকে সারিবদ্ধ করে। টেক্সটভিউ এবং বোতাম উপাদানগুলি এখন এইরকম হওয়া উচিত:
<TextView   
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center_horizontal"
   android:text="Hello World!" />

<Button
   android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="@string/roll_label" />
  1. রৈখিক বিন্যাসে android:layout_gravity অ্যাট্রিবিউট যোগ করুন এবং এটিকে "center_vertical" এর মান দিন। আপনার LinearLayout উপাদান এখন এই মত দেখতে হবে:
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:layout_gravity="center_vertical"
   tools:context=".MainActivity">
  1. টেক্সট ভিউতে টেক্সটের সাইজ বাড়ানোর জন্য, "30sp" মান সহ <TextView> এলিমেন্টে android:textSize অ্যাট্রিবিউট যোগ করুন। এসপি সংক্ষিপ্ত রূপটি স্কেলযোগ্য পিক্সেলকে বোঝায়, যা ডিভাইসের প্রদর্শনের গুণমান থেকে স্বাধীনভাবে পাঠ্যের আকার নির্ধারণের একটি পরিমাপ। টেক্সটভিউ উপাদানটি এখন এইরকম হওয়া উচিত:
<TextView   
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center_horizontal"
   android:textSize="30sp"
   android:text="Hello World!" />
  1. কম্পাইল করুন এবং আপনার অ্যাপ চালান।


এখন পাঠ্য এবং বোতাম উভয়ই সুন্দরভাবে স্থাপন করা হয়েছে এবং পাঠ্য ভিউতে আরও বড় পাঠ্য রয়েছে। বোতামটিতে এখনও কোনো কার্যকারিতা নেই, তাই আপনি এটি ক্লিক করলে কিছুই হবে না। আপনি যে পরবর্তী কাজ.

ধাপ 4: কোডে বোতামের একটি রেফারেন্স পান

MainActivity এর Kotlin কোডটি আপনার অ্যাপের ইন্টারেক্টিভ অংশগুলিকে সংজ্ঞায়িত করার জন্য দায়ী, যেমন আপনি একটি বোতামে ট্যাপ করলে কী ঘটে। একটি ফাংশন লিখতে যা বোতামটি ক্লিক করলে কার্যকর হয়, আপনাকে MainActivity-এ আপনার স্ফীত লেআউটে বোতাম অবজেক্টের একটি রেফারেন্স পেতে হবে। বোতামের একটি রেফারেন্স পেতে:

  • XML ফাইলে Button একটি আইডি বরাদ্দ করুন।
  • একটি নির্দিষ্ট আইডি সহ View রেফারেন্স পেতে আপনার কোডে findViewById() পদ্ধতিটি ব্যবহার করুন।

একবার আপনার কাছে Button দৃশ্যের একটি রেফারেন্স পাওয়া গেলে, অ্যাপটি চলার সাথে সাথে আপনি গতিশীলভাবে পরিবর্তন করতে সেই ভিউতে পদ্ধতিগুলি কল করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ক্লিক হ্যান্ডলার যোগ করতে পারেন যা বোতামটি ট্যাপ করার সময় কোডটি কার্যকর করে।

  1. activity_main.xml লেআউট ফাইলটি খুলুন, যদি এটি ইতিমধ্যে খোলা না থাকে, এবং পাঠ্য ট্যাবে ক্লিক করুন।
  2. বোতামটিতে android:id বৈশিষ্ট্য যোগ করুন এবং এটিকে একটি নাম দিন (এই ক্ষেত্রে, " @+id/roll_button" )। আপনার <Button> উপাদান এখন এই মত দেখায়:
<Button
   android:id="@+id/roll_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center_horizontal"
   android:text="@string/roll_label" />

আপনি যখন XML লেআউট ফাইলে একটি ভিউয়ের জন্য একটি আইডি তৈরি করেন, তখন Android স্টুডিও জেনারেট করা R ক্লাসে সেই আইডির নামের সাথে একটি পূর্ণসংখ্যা ধ্রুবক তৈরি করে। সুতরাং আপনি যদি একটি ভিউ roll_button নাম দেন, তাহলে Android স্টুডিও R ক্লাসে roll_button নামে একটি পূর্ণসংখ্যা ধ্রুবক তৈরি করে এবং তৈরি করে। আইডি নামের জন্য "@+id" উপসর্গটি কম্পাইলারকে সেই ID ধ্রুবকটিকে R ক্লাসে যোগ করতে বলে। আপনার XML ফাইলের সমস্ত ভিউ আইডিতে এই উপসর্গ থাকতে হবে..

  1. MainActivity Kotlin ফাইলটি খুলুন। onCreate() ভিতরে, setContentView() পরে, এই লাইনটি যোগ করুন:
val rollButton: Button = findViewById(R.id.roll_button)

আপনি XML ক্লাসে যে ভিউ সংজ্ঞায়িত করেছেন তার জন্য একটি View রেফারেন্স পেতে findViewById() পদ্ধতিটি ব্যবহার করুন। এই ক্ষেত্রে, আপনি R ক্লাস এবং ID roll_button থেকে Button রেফারেন্স পাবেন এবং আপনি সেই রেফারেন্সটি rollButton ভেরিয়েবলে বরাদ্দ করবেন।

  1. লক্ষ্য করুন যে অ্যান্ড্রয়েড স্টুডিও Button ক্লাসটিকে লাল রঙে হাইলাইট করে এবং এটিকে আন্ডারলাইন করে, এটি একটি অমীমাংসিত রেফারেন্স এবং এটি ব্যবহার করার আগে আপনাকে এই ক্লাসটি আমদানি করতে হবে। সম্পূর্ণ যোগ্য শ্রেণীর নাম নির্দেশ করে একটি টুলটিপও উপস্থিত হতে পারে:


  2. সম্পূর্ণ যোগ্য শ্রেণির নাম গ্রহণ করতে Alt+Enter ( একটি Mac-এ Option+Enter ) টিপুন।

ধাপ 5: একটি টোস্ট প্রদর্শন করতে একটি ক্লিক হ্যান্ডলার যোগ করুন

একটি ক্লিক হ্যান্ডলার হল এমন একটি পদ্ধতি যা প্রতিবার ব্যবহারকারী ক্লিক করা বা একটি ক্লিকযোগ্য UI উপাদান, যেমন একটি বোতামে ট্যাপ করা হয়। একটি ক্লিক হ্যান্ডলার তৈরি করতে আপনার প্রয়োজন:

  • একটি পদ্ধতি যা কিছু অপারেশন করে।
  • setOnClickHandler() পদ্ধতি, যা Button হ্যান্ডলার পদ্ধতিতে সংযুক্ত করে।

এই টাস্কে, আপনি একটি Toast প্রদর্শন করার জন্য একটি ক্লিক-হ্যান্ডলার পদ্ধতি তৈরি করুন। ( টোস্ট হল একটি বার্তা যা অল্প সময়ের জন্য স্ক্রীন পপ আপ করে।) আপনি ক্লিক-হ্যান্ডলার পদ্ধতিটিকে Button সাথে সংযুক্ত করুন।

  1. onCreate() এর পরে আপনার MainActivity ক্লাসে, rollDice() নামে একটি ব্যক্তিগত ফাংশন তৈরি করুন।
private fun rollDice() {
  
}
  1. যখন rollDice() বলা হয় তখন একটি Toast প্রদর্শন করতে rollDice() পদ্ধতিতে এই লাইনটি যোগ করুন:
Toast.makeText(this, "button clicked", 
   Toast.LENGTH_SHORT).show()

একটি টোস্ট তৈরি করতে, Toast.makeText() পদ্ধতিতে কল করুন। এই পদ্ধতিতে তিনটি জিনিস প্রয়োজন:

  • একটি Context বস্তু। Context অবজেক্ট আপনাকে Android OS এর বর্তমান অবস্থার সাথে যোগাযোগ করতে এবং তথ্য পেতে দেয়। আপনার এখানে একটি Context প্রয়োজন যাতে Toast অবজেক্টটি OS কে টোস্ট প্রদর্শন করতে বলতে পারে। যেহেতু AppCompatActivity হল Context এর একটি সাবক্লাস, আপনি শুধু প্রসঙ্গটির জন্য this কীওয়ার্ডটি ব্যবহার করতে পারেন।
  • বার্তাটি দেখানো হবে, এখানে "button clicked"
  • বার্তা দেখানোর সময়কাল। শেষে show() পদ্ধতি টোস্ট প্রদর্শন করে।
  1. onCreate() এ, findViewById() কল করার পরে rollButton অবজেক্টে ক্লিক হ্যান্ডলার হিসাবে rollDice() বরাদ্দ করতে এই লাইনটি যোগ করুন:
rollButton.setOnClickListener { rollDice() }

আপনার MainActivity ক্লাসের সম্পূর্ণ সংজ্ঞা এখন এইরকম দেখাচ্ছে:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val rollButton: Button = findViewById(R.id.roll_button)
        rollButton.setOnClickListener { rollDice() }
    }

    private fun rollDice() {
        Toast.makeText(this, "button clicked",
            Toast.LENGTH_SHORT).show()
    }
}
  1. কম্পাইল করুন এবং আপনার অ্যাপ চালান। প্রতিবার আপনি বোতামটি আলতো চাপলে, একটি টোস্ট উপস্থিত হওয়া উচিত।

এই টাস্কে, আপনি TextView এ টেক্সট পরিবর্তন করতে rollDice() পদ্ধতি পরিবর্তন করুন। প্রথম ধাপের জন্য, আপনি "Hello World!" থেকে সেই পাঠ্যটি পরিবর্তন করুন। স্ট্রিংটিতে "Dice Rolled!" . দ্বিতীয় ধাপের জন্য, আপনি এক থেকে ছয়ের মধ্যে একটি এলোমেলো সংখ্যা প্রদর্শন করেন।

ধাপ 1: একটি স্ট্রিং প্রদর্শন করুন

  1. activity_main.xml খুলুন, এবং TextView এ একটি ID যোগ করুন।
android:id="@+id/result_text"
  1. MainActivity খুলুন। rollDice() পদ্ধতিতে, Toast প্রদর্শন করতে লাইনটি মন্তব্য করুন।
  2. এর ID দ্বারা TextView এর একটি রেফারেন্স পেতে findViewById() পদ্ধতিটি ব্যবহার করুন। একটি resultText ভেরিয়েবলের রেফারেন্স বরাদ্দ করুন।
val resultText: TextView = findViewById(R.id.result_text)
  1. প্রদর্শিত টেক্সট পরিবর্তন করতে resultText.text বৈশিষ্ট্যে একটি নতুন স্ট্রিং বরাদ্দ করুন। আপনি সেই স্ট্রিংটিকে রিসোর্সে বের করার জন্য ইঙ্গিতটিকে উপেক্ষা করতে পারেন; এটি শুধুমাত্র একটি অস্থায়ী স্ট্রিং।
resultText.text = "Dice Rolled!"
  1. অ্যাপটি কম্পাইল করে রান করুন। মনে রাখবেন যে রোল বোতামটি আলতো চাপলে এখন TextView আপডেট হয়।

ধাপ 2: একটি এলোমেলো সংখ্যা প্রদর্শন করুন

অবশেষে, এই টাস্কে আপনি ডাইসের রোল অনুকরণ করতে বোতাম ক্লিকে এলোমেলোতা যোগ করুন। প্রতিবার বোতামটি ক্লিক করা বা ট্যাপ করা হলে আপনার কোডটি 1 থেকে 6 পর্যন্ত একটি এলোমেলো নম্বর বাছাই করে এবং TextView আপডেট করে। একটি র্যান্ডম নম্বর তৈরি করার কাজটি অ্যান্ড্রয়েড-নির্দিষ্ট নয় এবং আপনি এটি করতে Random ক্লাস ব্যবহার করেন।

  1. rollDice() পদ্ধতির শীর্ষে, Random.nextInt() পদ্ধতিটি 1 থেকে 6 এর মধ্যে একটি র্যান্ডম নম্বর পেতে ব্যবহার করুন:
val randomInt = Random().nextInt(6) + 1
  1. একটি স্ট্রিং হিসাবে text সম্পত্তি র্যান্ডম পূর্ণসংখ্যার মান সেট করুন:
resultText.text = randomInt.toString()
  1. অ্যাপটি কম্পাইল করে রান করুন। প্রতিবার আপনি রোল বোতামে ট্যাপ করলে, পাঠ্য ভিউতে নম্বরটি পরিবর্তিত হয়।

অ্যান্ড্রয়েড স্টুডিও প্রকল্প: ডাইসরোলার

চ্যালেঞ্জ: "কাউন্ট আপ" লেবেলযুক্ত অ্যাপে একটি দ্বিতীয় বোতাম যোগ করুন যা রোল বোতামের ঠিক নীচে প্রদর্শিত হয়। ট্যাপ করা হলে, কাউন্ট আপ বোতামটি ফলাফলের পাঠ্য দৃশ্যের বর্তমান মান পেতে হবে, এতে 1 যোগ করুন এবং পাঠ্য দৃশ্য আপডেট করুন। নিশ্চিত করুন যে আপনি এই প্রান্তের কেসগুলি পরিচালনা করছেন:

  • যদি ফলাফলের টেক্সট ভিউতে এখনও একটি সংখ্যা না থাকে (অর্থাৎ, যদি টেক্সট ভিউতে এখনও ডিফল্ট "হ্যালো ওয়ার্ল্ড" স্ট্রিং থাকে), ফলাফলের পাঠ্যটি 1 এ সেট করুন।
  • সংখ্যাটি ইতিমধ্যে 6 হলে, কিছুই করবেন না।

কোডিং চ্যালেঞ্জ সমাধান কোড

অ্যান্ড্রয়েড স্টুডিও প্রকল্প: ডাইসরোলার-চ্যালেঞ্জ

কার্যক্রম

  • MainActivity হল AppCompatActivity এর একটি সাবক্লাস, যা ঘুরেফিরে Activity একটি সাবক্লাস। একটি Activity হল একটি মূল অ্যান্ড্রয়েড ক্লাস যা একটি অ্যান্ড্রয়েড অ্যাপ UI আঁকতে এবং ইনপুট ইভেন্টগুলি গ্রহণের জন্য দায়ী৷
  • সমস্ত ক্রিয়াকলাপের একটি সংশ্লিষ্ট লেআউট ফাইল রয়েছে, যা অ্যাপের সংস্থানগুলির মধ্যে একটি XML ফাইল৷ লেআউট ফাইলটি কার্যকলাপের জন্য নামকরণ করা হয়েছে, উদাহরণস্বরূপ activity_main.xml
  • MainActivity setContentView() পদ্ধতিটি লেআউটটিকে অ্যাক্টিভিটির সাথে যুক্ত করে এবং যখন অ্যাক্টিভিটি তৈরি করা হয় তখন সেই লেআউটটিকে স্ফীত করে।
  • লেআউট স্ফীতি হল এমন একটি প্রক্রিয়া যেখানে XML লেআউট ফাইলগুলিতে সংজ্ঞায়িত দৃশ্যগুলিকে মেমরিতে Kotlin ভিউ অবজেক্টে পরিণত করা হয় (বা "স্ফীত")। একবার লেআউট স্ফীতি ঘটলে, Activity এই বস্তুগুলিকে পর্দায় আঁকতে পারে এবং গতিশীলভাবে পরিবর্তন করতে পারে।

ভিউ

  • অ্যাপ লেআউটের সমস্ত UI উপাদান হল View ক্লাসের সাবক্লাস এবং এগুলোকে ভিউ বলা হয়। TextView এবং Button দৃশ্যের উদাহরণ।
  • ViewGroup গ্রুপের View এলিমেন্টগুলিকে গ্রুপ করা যেতে পারে। একটি ভিউ গ্রুপ এটির ভিউ বা অন্যান্য ভিউ গ্রুপগুলির জন্য একটি ধারক হিসাবে কাজ করে। LinearLayout হল একটি ভিউ গ্রুপের একটি উদাহরণ যা তার ভিউগুলিকে রৈখিকভাবে সাজায়।

বৈশিষ্ট্য দেখুন

  • android:layout_width এবং android:layout_height বৈশিষ্ট্যগুলি একটি দৃশ্যের ওজন এবং উচ্চতা নির্দেশ করে৷ match_parent মান ভিউটিকে তার পিতামাতার প্রস্থ বা উচ্চতায় প্রসারিত করে। wrap_content মান ভিউয়ের বিষয়বস্তুর সাথে মানানসই দৃশ্যকে সঙ্কুচিত করে।
  • android:text অ্যাট্রিবিউট সেই টেক্সটকে নির্দেশ করে যা একটি ভিউতে দেখানো উচিত (যদি সেই ভিউ টেক্সট দেখায়।) বোতামের জন্য, android:text হল বোতাম লেবেল।
  • একটি LinearLayout ভিউ গ্রুপে android:orientation অ্যাট্রিবিউট এতে থাকা ভিউ উপাদানগুলিকে সাজায়। horizontal মান বাম থেকে ডানে দৃশ্য সাজায়। vertical একটি মান উপরে থেকে নীচের দৃশ্যগুলিকে সাজায়৷
  • android:layout_gravity অ্যাট্রিবিউট একটি ভিউ এবং সেই ভিউ এর বাচ্চাদের বসানো নির্ধারণ করে।
  • android:textSize অ্যাট্রিবিউট টেক্সট ভিউতে টেক্সটের সাইজ নির্ধারণ করে। পাঠ্যের আকার sp ইউনিটে নির্দিষ্ট করা হয় ( মাপযোগ্য পিক্সেল )। sp ইউনিট ব্যবহার করে, আপনি ডিভাইসের ডিসপ্লে কোয়ালিটি থেকে স্বাধীনভাবে টেক্সট সাইজ করতে পারেন।

স্ট্রিংস

  • বিন্যাসে হার্ডকোডিং স্ট্রিং এর পরিবর্তে, স্ট্রিং সংস্থানগুলি ব্যবহার করা একটি সর্বোত্তম অনুশীলন।
  • স্ট্রিং সংস্থান values/res/string.xml ফাইলে রয়েছে।
  • স্ট্রিং এক্সট্র্যাক্ট করতে, Alt+Enter ( Option+Enter ম্যাক) ব্যবহার করুন। পপআপ মেনু থেকে এক্সট্রাক্ট স্ট্রিং রিসোর্স নির্বাচন করুন।

ভিউ ব্যবহার করে

  • আপনার কোটলিন কোডটিকে এমন একটি দৃশ্যের সাথে সংযুক্ত করতে যা আপনি লেআউটে সংজ্ঞায়িত করেছেন, ভিউ স্ফীত হওয়ার পরে আপনাকে ভিউ অবজেক্টের একটি রেফারেন্স পেতে হবে। লেআউটের ভিউতে একটি আইডি ( android:id ) বরাদ্দ করুন, তারপর সংশ্লিষ্ট ভিউ অবজেক্ট পেতে findViewById() পদ্ধতি ব্যবহার করুন।
  • আপনি যখন XML লেআউট ফাইলে একটি ভিউয়ের জন্য একটি আইডি তৈরি করেন, তখন Android স্টুডিও জেনারেট করা R ক্লাসে সেই আইডির নামের সাথে একটি পূর্ণসংখ্যা ধ্রুবক তৈরি করে। তারপর আপনি findViewById() পদ্ধতিতে সেই R.id রেফারেন্স ব্যবহার করতে পারেন।
  • আপনি সম্পত্তির নাম দ্বারা সরাসরি আপনার Kotlin কোডে একটি ভিউ অবজেক্টের বৈশিষ্ট্য সেট করতে পারেন। উদাহরণ স্বরূপ, টেক্সট ভিউ-এর টেক্সট XML-এ android:text অ্যাট্রিবিউট দ্বারা সংজ্ঞায়িত করা হয় এবং এটি Kotlin-এর text প্রোপার্টি দ্বারা সংজ্ঞায়িত করা হয়।
  • একটি ক্লিক হ্যান্ডলার হল একটি পদ্ধতি যা ব্যবহার করা হয় যখন ব্যবহারকারী একটি UI উপাদানে ক্লিক বা ট্যাপ করে। একটি ভিউ যেমন একটি বোতামে একটি ক্লিক-হ্যান্ডলার পদ্ধতি সংযুক্ত করতে, setOnClickListener() পদ্ধতি ব্যবহার করুন।

টোস্ট ব্যবহার করে

একটি টোস্ট একটি দৃশ্য যা ব্যবহারকারীকে একটি ছোট পপআপ উইন্ডোতে একটি সাধারণ বার্তা দেখায়।

একটি টোস্ট তৈরি করতে, তিনটি আর্গুমেন্ট সহ Toast ক্লাসে makeText() ফ্যাক্টরি পদ্ধতিতে কল করুন:

  • অ্যাপের Activity প্রসঙ্গ
  • প্রদর্শিত বার্তা, উদাহরণস্বরূপ একটি স্ট্রিং সম্পদ
  • একটি সময়কাল, উদাহরণস্বরূপ Toast.LENGTH_SHORT

টোস্ট প্রদর্শন করতে, show() কল করুন।

উদাসীনতা কোর্স:

অ্যান্ড্রয়েড বিকাশকারী ডকুমেন্টেশন:

অন্যান্য:

এই বিভাগে একজন প্রশিক্ষকের নেতৃত্বে একটি কোর্সের অংশ হিসাবে এই কোডল্যাবের মাধ্যমে কাজ করা শিক্ষার্থীদের জন্য সম্ভাব্য হোমওয়ার্ক অ্যাসাইনমেন্ট তালিকাভুক্ত করা হয়েছে। নিম্নলিখিতগুলি করা প্রশিক্ষকের উপর নির্ভর করে:

  • প্রয়োজনে হোমওয়ার্ক বরাদ্দ করুন।
  • শিক্ষার্থীদের সাথে যোগাযোগ করুন কিভাবে হোমওয়ার্ক অ্যাসাইনমেন্ট জমা দিতে হয়।
  • হোমওয়ার্ক অ্যাসাইনমেন্ট গ্রেড.

প্রশিক্ষকরা এই পরামর্শগুলি যতটা কম বা যতটা চান ততটা ব্যবহার করতে পারেন, এবং তাদের উপযুক্ত মনে করে অন্য কোনও হোমওয়ার্ক বরাদ্দ করতে নির্দ্বিধায় করা উচিত।

আপনি যদি নিজে থেকে এই কোডল্যাবের মাধ্যমে কাজ করে থাকেন, তাহলে আপনার জ্ঞান পরীক্ষা করার জন্য এই হোমওয়ার্ক অ্যাসাইনমেন্টগুলিকে নির্দ্বিধায় ব্যবহার করুন৷

একটি অ্যাপ পরিবর্তন করুন

DiceRoller অ্যাপটি খুলুন। "রিসেট" লেবেলযুক্ত অ্যাপ্লিকেশনটিতে একটি বোতাম যুক্ত করুন যা রোল বোতামের ঠিক নীচে প্রদর্শিত হয়৷ সেই বোতামটি 0-এ ফলাফলের পাঠ্য ভিউ রিসেট করুন।

এই প্রশ্নগুলোর উত্তর দাও

প্রশ্ন 1

একটি Activity কোন পদ্ধতিটি অ্যাপের লেআউটকে স্ফীত করে এবং এর দৃশ্যগুলিকে অবজেক্ট হিসাবে উপলব্ধ করে?

  • onCreate()
  • setClickListener()
  • setContentView()
  • show()

প্রশ্ন 2

কোন ভিউ অ্যাট্রিবিউট আপনি একটি ভিউয়ের প্রস্থ সেট করতে ব্যবহার করেন যাতে এটি বিষয়বস্তুর সাথে মানানসই হয়?

  • android:view_width="wrap"
  • android:layout_width="wrap_content"
  • android:layout_height="wrap_content"
  • android:layout_width="match_parent"

গ্রেডিংয়ের জন্য আপনার অ্যাপটি জমা দিন

অ্যাপটিতে নিম্নলিখিতগুলি রয়েছে তা নিশ্চিত করতে পরীক্ষা করুন:

  • অ্যাপ লেআউটে একটি টেক্সট ভিউ এবং দুটি বোতাম থাকা উচিত।
  • অ্যাপের কোড দুটি ক্লিক হ্যান্ডলার সেট করা উচিত, প্রতিটি বোতামের জন্য একটি।
  • টেক্সট ভিউ রিসেট করা ক্লিক হ্যান্ডলার টেক্সট প্রপার্টি 0 এ সেট করবে।

পরবর্তী পাঠ শুরু করুন: 1.3 চিত্র সংস্থান এবং সামঞ্জস্য

এই কোর্সে অন্যান্য কোডল্যাবগুলির লিঙ্কগুলির জন্য, Android Kotlin Fundamentals codelabs ল্যান্ডিং পৃষ্ঠাটি দেখুন।