একটি মৌলিক ইন্টারেক্টিভ ডাইস রোলার অ্যাপ তৈরি করুন

এই কোডল্যাবে, আপনি একটি ডাইস রোলার অ্যান্ড্রয়েড অ্যাপ তৈরি করবেন যেখানে ব্যবহারকারীরা একটি পাশা রোল করতে অ্যাপের একটি Button ক্লিক করতে পারবেন। রোলের ফলাফল স্ক্রিনে একটি TextView দেখানো হবে।

আপনি আপনার অ্যাপ লেআউট তৈরি করতে অ্যান্ড্রয়েড স্টুডিওতে লেআউট এডিটর ব্যবহার করবেন, এবং তারপর Button ক্লিক করলে কী হবে তার জন্য কোটলিন কোড লিখবেন।

পূর্বশর্ত

  • কীভাবে একটি "হ্যালো, ওয়ার্ল্ড!" তৈরি এবং চালাবেন অ্যান্ড্রয়েড স্টুডিওতে অ্যাপ।
  • একটি অ্যাপে TextViews এবং ImageViews ব্যবহার করার সাথে পরিচিত।
  • লেআউট এডিটরে TextView -এর বৈশিষ্ট্যগুলি কীভাবে পরিবর্তন করবেন।
  • আপনার অ্যাপকে অনুবাদ করা এবং স্ট্রিং পুনঃব্যবহার করা সহজ করতে কীভাবে একটি স্ট্রিং রিসোর্সে টেক্সট এক্সট্র্যাক্ট করবেন।
  • কোটলিন প্রোগ্রামিং বেসিকগুলি যেমন পূর্ববর্তী কোডল্যাবগুলিতে শেখানো হয়েছিল।

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

  • অ্যান্ড্রয়েড অ্যাপে কীভাবে একটি Button যুক্ত করবেন।
  • অ্যাপে একটি Button ট্যাপ করা হলে কীভাবে আচরণ যোগ করবেন।
  • একটি অ্যাপের Activity কোড কীভাবে খুলবেন এবং পরিবর্তন করবেন।
  • কিভাবে একটি Toast বার্তা প্রদর্শন করবেন।
  • অ্যাপটি চলাকালীন একটি TextView এর বিষয়বস্তু কিভাবে আপডেট করবেন।

আপনি কি নির্মাণ করবেন

  • একটি ডাইস রোলার অ্যান্ড্রয়েড অ্যাপ যাতে একটি ডাইস রোল করার জন্য একটি Button রয়েছে এবং রোলের ফলাফল সহ স্ক্রিনে পাঠ্য আপডেট করে৷

তুমি কি চাও

  • অ্যান্ড্রয়েড স্টুডিও ইনস্টল করা একটি কম্পিউটার।

আপনি এই কোডল্যাবটি সম্পূর্ণ করলে অ্যাপটি কেমন হবে তা এখানে।

একটি খালি কার্যকলাপ প্রকল্প তৈরি করুন

  1. আপনার যদি ইতিমধ্যেই অ্যান্ড্রয়েড স্টুডিওতে একটি বিদ্যমান প্রকল্প খোলা থাকে, তাহলে নতুন প্রকল্প তৈরি করুন স্ক্রীন খুলতে ফাইল > নতুন > নতুন প্রকল্প... এ যান।
  2. Create New Project এ, Empty Activity টেমপ্লেট ব্যবহার করে একটি নতুন Kotlin প্রকল্প তৈরি করুন।
  3. অ্যাপটিকে "ডাইস রোলার" কল করুন, যার ন্যূনতম API লেভেল 19 (KitKat)।

গুরুত্বপূর্ণ: আপনি যদি অ্যান্ড্রয়েড স্টুডিওতে একটি নতুন প্রকল্প তৈরি করার সাথে পরিচিত না হন, তাহলে বিস্তারিত জানার জন্য আপনার প্রথম অ্যান্ড্রয়েড অ্যাপ তৈরি করুন এবং চালান দেখুন।

  1. নতুন অ্যাপটি চালান এবং এটি দেখতে এইরকম হওয়া উচিত।

লেআউট এডিটর খুলুন

  1. প্রজেক্ট উইন্ডোতে, এটি খুলতে activity_main.xml ( app > res > layout > activity_main.xml ) ডাবল-ক্লিক করুন। অ্যাপের কেন্দ্রে শুধুমাত্র "হ্যালো ওয়ার্ল্ড" TextView সহ আপনার লেআউট সম্পাদক দেখতে হবে।

এরপরে আপনি আপনার অ্যাপে একটি Button যোগ করবেন। একটি Button অ্যান্ড্রয়েডের একটি ইউজার ইন্টারফেস (UI) উপাদান যা ব্যবহারকারী একটি ক্রিয়া সম্পাদন করতে ট্যাপ করতে পারে।

এই টাস্কে, আপনি "হ্যালো ওয়ার্ল্ড" TextView -এর নীচে একটি Button যোগ করুন। TextView এবং Button একটি ConstraintLayout এর মধ্যে অবস্থিত হবে, যা ViewGroup একটি প্রকার।

যখন একটি ViewGroup মধ্যে Views থাকে, Views প্যারেন্ট ViewGroup সন্তান হিসেবে বিবেচনা করা হয়। আপনার অ্যাপের ক্ষেত্রে, TextView এবং Button প্যারেন্ট ConstraintLayout লেআউটের সন্তান হিসেবে বিবেচনা করা হবে।

আপনার অ্যাপে বিদ্যমান ConstraintLayout এর একটি শিশু হিসাবে একটি Button যোগ করার সাথে এগিয়ে যান।

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

  1. প্যালেট থেকে ডিজাইন ভিউতে একটি Button টেনে আনুন, এটিকে "হ্যালো ওয়ার্ল্ড" TextView -এর নীচে অবস্থান করুন।
  2. কম্পোনেন্ট ট্রি -তে প্যালেটের নীচে, Button এবং TextView ConstraintLayout লেআউটের ( ConstraintLayout লেআউটের সন্তান হিসাবে) তালিকাভুক্ত হয়েছে কিনা তা যাচাই করুন।
  3. একটি ত্রুটি লক্ষ্য করুন যে Button সীমাবদ্ধ নয়। যেহেতু Button একটি ConstraintLayout এর মধ্যে বসে আছে, তাই এটির অবস্থানের জন্য আপনাকে অবশ্যই উল্লম্ব এবং অনুভূমিক সীমাবদ্ধতা সেট করতে হবে।

বোতামটি অবস্থান করুন

এই ধাপে আপনি Button শীর্ষ থেকে TextView এর নীচে একটি উল্লম্ব সীমাবদ্ধতা যোগ করবেন। এটি TextView -এর নীচে Button অবস্থান করবে।

  1. ডিজাইন ভিউতে, Button উপরের প্রান্তে, নীল বর্ডার সহ সাদা বৃত্ত টিপুন এবং ধরে রাখুন। পয়েন্টার টেনে আনুন, এবং একটি তীর পয়েন্টার অনুসরণ করবে। আপনি যখন "হ্যালো ওয়ার্ল্ড" TextView -এর নীচের প্রান্তে পৌঁছাবেন তখন ছেড়ে দিন৷ এটি একটি লেআউট সীমাবদ্ধতা স্থাপন করে এবং Button TextView এর ঠিক নীচে স্লাইড করে।
  2. লেআউট এডিটরের ডান দিকের বৈশিষ্ট্যগুলি দেখুন।
  3. সীমাবদ্ধতা উইজেটে, একটি নতুন লেআউট সীমাবদ্ধতা লক্ষ্য করুন যা TextView , Top → BottomOf textView (0dp) এর নীচে সেট করা আছে। (0dp) মানে 0-এর একটি মার্জিন রয়েছে। অনুভূমিক সীমাবদ্ধতার অনুপস্থিত হওয়ার জন্য আপনার একটি ত্রুটিও রয়েছে।
  4. Button বাম পাশ থেকে প্যারেন্ট ConstraintLayout বাম দিকে একটি অনুভূমিক সীমাবদ্ধতা যুক্ত করুন।
  5. কন্সট্রেন্ট লেআউটের ডান প্রান্তে Button ডান ConstraintLayout সংযুক্ত করে ডান দিকে পুনরাবৃত্তি করুন। ফলাফল এই মত হওয়া উচিত:

  1. Button এখনও নির্বাচিত হলে, সীমাবদ্ধতা উইজেটটি এইরকম হওয়া উচিত। যোগ করা হয়েছে এমন দুটি অতিরিক্ত সীমাবদ্ধতা লক্ষ্য করুন: স্টার্ট → স্টার্টঅফ প্যারেন্ট (0ডিপি) এবং এন্ড → এন্ডঅফ প্যারেন্ট (0ডিপি) । এর অর্থ হল Button অনুভূমিকভাবে তার অভিভাবক, ConstraintLayout এ কেন্দ্রীভূত।
  1. অ্যাপটি চালান। এটি নীচের স্ক্রিনশটের মতো হওয়া উচিত। আপনি Button ক্লিক করতে পারেন, কিন্তু এটি এখনও কিছু করে না। চলো যেতে থাকি!

বোতাম পাঠ্য পরিবর্তন করুন

আপনি লেআউট এডিটরে আরও কয়েকটি UI পরিবর্তন করতে যাচ্ছেন।

Button লেবেল "বাটন" শো করার পরিবর্তে এটিকে এমন কিছুতে পরিবর্তন করুন যা নির্দেশ করে যে বোতামটি কী করতে যাচ্ছে: "রোল"।

  1. লেআউট এডিটরে , Button নির্বাচন করে, অ্যাট্রিবিউটে যান, টেক্সটটি রোল -এ পরিবর্তন করুন এবং Enter ( ম্যাকে Return ) কী টিপুন।

  1. কম্পোনেন্ট ট্রিতে , Button পাশে একটি কমলা সতর্কীকরণ ত্রিভুজ প্রদর্শিত হয়। আপনি যদি ত্রিভুজের উপর পয়েন্টারটি ঘোরান, একটি বার্তা প্রদর্শিত হবে। অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ কোডে একটি হার্ডকোড করা স্ট্রিং ("রোল") সনাক্ত করেছে এবং পরিবর্তে একটি স্ট্রিং সংস্থান ব্যবহার করার পরামর্শ দিয়েছে৷

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

  1. কম্পোনেন্ট ট্রিতে, কমলা ত্রিভুজটিতে ক্লিক করুন।

সম্পূর্ণ সতর্কতা বার্তা খোলে।

  1. বার্তার নীচে, প্রস্তাবিত ফিক্সের অধীনে, ফিক্স বোতামে ক্লিক করুন। (আপনাকে নিচে স্ক্রোল করতে হতে পারে।)
  2. এক্সট্র্যাক্ট রিসোর্স ডায়ালগ খোলে। একটি স্ট্রিং এক্সট্রাক্ট করার অর্থ হল "রোল" টেক্সট নেওয়া এবং strings.xml ( app > res > values ​​> strings.xml ) এ roll নামে একটি স্ট্রিং রিসোর্স তৈরি করা। ডিফল্ট মান সঠিক, তাই ঠিক আছে ক্লিক করুন।

  1. লক্ষ্য করুন যে অ্যাট্রিবিউটে , Button জন্য পাঠ্য বৈশিষ্ট্যটি এখন বলেছে @string/roll , আপনার এইমাত্র তৈরি করা সংস্থানটিকে উল্লেখ করে।

ডিজাইন ভিউতে, Button এখনও রোল অন বলা উচিত।

টেক্সটভিউ স্টাইল করুন

"হ্যালো ওয়ার্ল্ড!" পাঠ্যটি বেশ ছোট, এবং বার্তাটি আপনার অ্যাপের জন্য প্রাসঙ্গিক নয়। এই ধাপে আপনি ছোট "হ্যালো, ওয়ার্ল্ড!" প্রতিস্থাপন করবেন। রোলড মান দেখানোর জন্য একটি সংখ্যা সহ বার্তা পাঠান এবং ফন্টটি বড় করুন, যাতে এটি দেখতে সহজ হয়।

  1. ডিজাইন এডিটরে , TextView নির্বাচন করুন যাতে এর বৈশিষ্ট্যগুলি বৈশিষ্ট্য উইন্ডোতে প্রদর্শিত হয়।
  2. TextView এর টেক্সট সাইজ TextView এ পরিবর্তন করুন, যাতে এটি বড় এবং সহজে পড়া যায়। টেক্সট সাইজ খুঁজতে আপনাকে স্ক্রোল করতে হতে পারে।

  1. TextView এর টেক্সট অ্যাট্রিবিউট সাফ করুন। ব্যবহারকারী পাশা রোল না করা পর্যন্ত আপনাকে TextView কিছু প্রদর্শন করতে হবে না।

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

.

  1. কম্পোনেন্ট ট্রিতে TextView নির্বাচন করুন।
  2. কমন অ্যাট্রিবিউটের অধীনে, টেক্সট অ্যাট্রিবিউট খুঁজুন এবং এর নিচে টুল আইকন সহ আরেকটি টেক্সট অ্যাট্রিবিউট খুঁজুন। টেক্সট অ্যাট্রিবিউট হল অ্যাপটি চলাকালীন ব্যবহারকারীর কাছে যা প্রদর্শিত হবে। একটি টুল আইকন সহ টেক্সট অ্যাট্রিবিউট হল "টুল টেক্সট" অ্যাট্রিবিউট যা শুধুমাত্র একজন ডেভেলপার হিসেবে আপনার জন্য।
  3. টেক্সটভিউতে টুল TextView "1" হিসাবে সেট করুন (আপনার কাছে 1 এর ডাইস রোল আছে এমন ভান করতে)। "1" শুধুমাত্র অ্যান্ড্রয়েড স্টুডিওর মধ্যে ডিজাইন এডিটরে প্রদর্শিত হবে, কিন্তু আপনি যখন একটি প্রকৃত ডিভাইস বা এমুলেটরে অ্যাপটি চালাবেন তখন এটি প্রদর্শিত হবে না।

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

  1. প্রিভিউতে আপনার অ্যাপটি দেখুন। "1" দেখাচ্ছে।

  1. আপনার অ্যাপ চালান। অ্যাপটি যখন এমুলেটরে চালানো হয় তখন এটির মতো দেখায়। "1" দেখানো হচ্ছে না। এটাই সঠিক আচরণ।

দুর্দান্ত, আপনি লেআউট পরিবর্তনগুলি সম্পন্ন করেছেন!

আপনার কাছে একটি বোতাম সহ একটি অ্যাপ রয়েছে, তবে আপনি যদি বোতামটি আলতো চাপেন তবে কিছুই হবে না। এটি পরিবর্তন করতে, আপনাকে কিছু Kotlin কোড লিখতে হবে যা ডাইস রোল করে এবং বোতামটি আলতো চাপলে স্ক্রীন আপডেট করে।

এই পরিবর্তনটি করার জন্য, আপনাকে একটি অ্যান্ড্রয়েড অ্যাপ কীভাবে গঠন করা হয় তা আরও কিছুটা বুঝতে হবে।

একটি Activity সেই উইন্ডোটি প্রদান করে যেখানে আপনার অ্যাপটি তার UI আঁকে। সাধারণত, একটি Activity আপনার চলমান অ্যাপের পুরো স্ক্রীনটি নেয়। প্রতিটি অ্যাপের এক বা একাধিক কার্যক্রম রয়েছে। শীর্ষ-স্তরের বা প্রথম কার্যকলাপকে প্রায়শই MainActivity বলা হয় এবং প্রকল্প টেমপ্লেট দ্বারা সরবরাহ করা হয়। উদাহরণস্বরূপ, যখন ব্যবহারকারী তাদের ডিভাইসে অ্যাপের তালিকার মধ্য দিয়ে স্ক্রোল করে এবং "ডাইস রোলার" অ্যাপ আইকনে ট্যাপ করে, তখন অ্যান্ড্রয়েড সিস্টেম অ্যাপটির MainActivity শুরু করবে।

আপনার MainActivity কোডে, আপনাকে Activity লেআউট এবং ব্যবহারকারীর কীভাবে এটির সাথে ইন্টারঅ্যাক্ট করা উচিত তার বিশদ বিবরণ দিতে হবে।

  • জন্মদিনের কার্ড অ্যাপে, একটি Activity রয়েছে যা জন্মদিনের বার্তা এবং ছবি প্রদর্শন করে।
  • ডাইস রোলার অ্যাপে, এমন একটি Activity রয়েছে যা আপনার তৈরি করা TextView এবং Button লেআউট প্রদর্শন করে।

আরও জটিল অ্যাপের জন্য, একাধিক স্ক্রীন এবং একাধিক Activity থাকতে পারে। প্রতিটি Activity একটি নির্দিষ্ট উদ্দেশ্য আছে.

উদাহরণস্বরূপ, একটি ফটো গ্যালারি অ্যাপে, আপনার ফটোগুলির একটি গ্রিড প্রদর্শনের জন্য একটি Activity , একটি পৃথক ছবি দেখার জন্য একটি দ্বিতীয় Activity এবং একটি পৃথক ফটো সম্পাদনা করার জন্য একটি তৃতীয় Activity থাকতে পারে৷

MainActivity.kt ফাইলটি খুলুন

আপনি MainActivity একটি বোতাম ট্যাপের প্রতিক্রিয়া জানাতে কোড যোগ করবেন। এটি সঠিকভাবে করার জন্য, আপনাকে আপনার অ্যাপে ইতিমধ্যেই থাকা MainActivity কোড সম্পর্কে আরও বুঝতে হবে।

  1. MainActivity.kt ফাইলে নেভিগেট করুন এবং খুলুন ( app > java > com.example.diceroller > MainActivity.kt )। নীচে আপনি কি দেখতে হবে. আপনি যদি import... , আমদানি প্রসারিত করতে ... এ ক্লিক করুন।
package com.example.diceroller

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

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

আপনাকে উপরের কোডের প্রতিটি শব্দ বোঝার দরকার নেই, তবে এটি কী করে সে সম্পর্কে আপনার একটি সাধারণ ধারণা থাকা দরকার। আপনি Android কোডের সাথে যত বেশি কাজ করবেন, এটি তত বেশি পরিচিত হবে এবং আপনি এটি তত বেশি বুঝতে পারবেন।

  1. MainActivity ক্লাসের জন্য কোটলিন কোডটি দেখুন, কীওয়ার্ড class এবং তারপর নাম দ্বারা চিহ্নিত।
class MainActivity : AppCompatActivity() {
    ...
}
  1. লক্ষ্য করুন যে আপনার MainActivity এ কোন main() ফাংশন নেই।

    আগে, আপনি শিখেছেন যে প্রতিটি কোটলিন প্রোগ্রামের একটি main() ফাংশন থাকতে হবে। অ্যান্ড্রয়েড অ্যাপগুলো ভিন্নভাবে কাজ করে। একটি main() ফাংশন কল করার পরিবর্তে, যখন আপনার অ্যাপটি প্রথমবার খোলা হয় তখন Android সিস্টেম আপনার MainActivity এর onCreate() পদ্ধতিতে কল করে।
  2. onCreate() পদ্ধতি খুঁজুন, যা নিচের কোডের মত দেখাচ্ছে।
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
   }

আপনি পরবর্তী কোডল্যাবে override সম্পর্কে শিখবেন (তাই আপাতত এটি নিয়ে চিন্তা করবেন না)। বাকি onCreate() পদ্ধতিটি আমদানি থেকে কোড ব্যবহার করে এবং setContentView() দিয়ে শুরুর লেআউট সেট করে MainActivity সেট আপ করে।

  1. import দিয়ে শুরু হওয়া লাইনগুলি লক্ষ্য করুন।

অ্যান্ড্রয়েড অ্যানড্রয়েড অ্যাপ্লিকেশানগুলিকে সহজে লেখার জন্য অসংখ্য ক্লাসের একটি ফ্রেমওয়ার্ক প্রদান করে, তবে আপনি কোন ক্লাস বলতে চান তা জানতে হবে। আপনি একটি import বিবৃতি ব্যবহার করে আপনার কোডে ফ্রেমওয়ার্কের কোন ক্লাসটি ব্যবহার করবেন তা নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, Button ক্লাসটি android.widget.Button এ সংজ্ঞায়িত করা হয়েছে।

স্বয়ংক্রিয় আমদানি সক্ষম করুন৷

আপনি যখন আরও ক্লাস ব্যবহার করেন তখন import বিবৃতি যোগ করার কথা মনে রাখা অনেক কাজের হয়ে উঠতে পারে। সৌভাগ্যবশত, যখন আপনি অন্যদের দ্বারা প্রদত্ত ক্লাস ব্যবহার করেন তখন Android স্টুডিও আপনাকে সঠিক আমদানি চয়ন করতে সহায়তা করে। এই ধাপে আপনি অ্যান্ড্রয়েড স্টুডিও কনফিগার করবেন যাতে এটি সম্ভব হলে স্বয়ংক্রিয়ভাবে আমদানি যোগ করতে পারে এবং আপনার কোড থেকে অব্যবহৃত আমদানিগুলি স্বয়ংক্রিয়ভাবে সরিয়ে দেয়।

  1. অ্যান্ড্রয়েড স্টুডিওতে, ফাইল > অন্যান্য সেটিংস > নতুন প্রকল্পগুলির জন্য পছন্দগুলিতে গিয়ে সেটিংস খুলুন।
  2. অন্যান্য সেটিংস > স্বয়ংক্রিয় আমদানি প্রসারিত করুন। Java এবং Kotlin বিভাগে, নিশ্চিত করুন যে ফ্লাইতে দ্ব্যর্থহীন আমদানি যোগ করুন এবং ফ্লাইতে (বর্তমান প্রকল্পের জন্য) অপ্টিমাইজ আমদানি চেক করা হয়েছে। মনে রাখবেন প্রতিটি বিভাগে দুটি চেকবক্স আছে।

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

এখন যেহেতু আপনি MainActivity সম্পর্কে আরও কিছু জানেন, আপনি অ্যাপটি পরিবর্তন করবেন যাতে Button ক্লিক করলে স্ক্রিনে কিছু হয়।

বোতামটি ক্লিক করা হলে একটি বার্তা প্রদর্শন করুন

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

  1. setContentView() কলের পরে onCreate() পদ্ধতিতে নিম্নলিখিত কোড যোগ করুন। findViewById() পদ্ধতি লেআউটে Button খুঁজে পায়। R.id.button হল Button জন্য রিসোর্স আইডি, যা এটির জন্য একটি অনন্য শনাক্তকারী। কোডটি rollButton নামক একটি ভেরিয়েবলে Button অবজেক্টের একটি রেফারেন্স সংরক্ষণ করে, Button অবজেক্টে নয়।
val rollButton: Button = findViewById(R.id.button)

কোডটি Button অবজেক্টের রেফারেন্সকে rollButton নামক একটি ভেরিয়েবলে সংরক্ষণ করে, Button অবজেক্টে নয়।

onCreate() পদ্ধতিটি এখন এইরকম হওয়া উচিত।

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

   val rollButton: Button = findViewById(R.id.button)
}
  1. যাচাই করুন যে Android স্টুডিও স্বয়ংক্রিয়ভাবে Button জন্য একটি import বিবৃতি যোগ করেছে।
    লক্ষ্য করুন এখন 3টি আমদানি বিবৃতি রয়েছে—তৃতীয়টি স্বয়ংক্রিয়ভাবে যুক্ত হয়েছে৷
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

এরপরে আপনাকে Button সাথে কোড সংযুক্ত করতে হবে, যাতে Button ট্যাপ করা হলে কোডটি কার্যকর করা যায়। একটি ক্লিক শ্রোতা হল কিছু কোড যা একটি ট্যাপ বা ক্লিক হলে কি করতে হবে। আপনি এটিকে কোড হিসাবে ভাবতে পারেন যা ব্যবহারকারীর জন্য Button ক্লিক করার জন্য কেবল বসে আছে, "শোনাচ্ছে"।

  1. rollButton অবজেক্টটি ব্যবহার করুন এবং setOnClickListener() পদ্ধতিতে কল করে এটিতে একটি ক্লিক লিসেনার সেট করুন।
rollButton.setOnClickListener {
}


আপনি টাইপ করার সাথে সাথে Android স্টুডিও একাধিক পরামর্শ দেখাতে পারে। এই ক্ষেত্রে, setOnClickListener {...} বিকল্পটি বেছে নিন।

কোঁকড়া ধনুর্বন্ধনীর মধ্যে, বোতামটি ট্যাপ করা হলে কী ঘটবে তার জন্য আপনি নির্দেশাবলী রাখেন। আপাতত, আপনার অ্যাপটি একটি Toast প্রদর্শন করবে, যা ব্যবহারকারীর কাছে প্রদর্শিত একটি সংক্ষিপ্ত বার্তা।

  1. টেক্সট দিয়ে একটি Toast তৈরি করুন "Dice Rolled!" Toast.makeText() কল করে।
val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT)
  1. তারপর show() পদ্ধতিতে কল করে Toast নিজেকে প্রদর্শন করতে বলুন।
toast.show()

আপনার MainActivity ক্লাসের আপডেটটি এইরকম দেখাচ্ছে; package এবং import বিবৃতি এখনও ফাইলের শীর্ষে রয়েছে:

class MainActivity : AppCompatActivity() {

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

       val rollButton: Button = findViewById(R.id.button)
       rollButton.setOnClickListener {
           val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT)
           toast.show()
       }
   }
}

আপনি একটি পরিবর্তনশীল ছাড়াই একটি একক লাইনে ক্লিক শ্রোতার দুটি লাইন একত্রিত করতে পারেন। এটি একটি সাধারণ প্যাটার্ন যা আপনি অন্য কোডে খুঁজে পেতে পারেন।

Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT).show()
  1. অ্যাপটি চালান এবং রোল বোতামে ক্লিক করুন। একটি টোস্ট বার্তা স্ক্রিনের নীচে পপ আপ হওয়া উচিত এবং অল্প সময়ের পরে অদৃশ্য হয়ে যাবে।

হুররে! বাটন ক্লিক বার্তা পপ আপ করেছে! এই প্রথম আপনি Android এর জন্য Kotlin কোড লিখেছেন!

বোতামটি ক্লিক করা হলে TextView আপডেট করুন

একটি অস্থায়ী Toast বার্তা দেখানোর পরিবর্তে, রোল বোতামটি ক্লিক করার সময় আপনি স্ক্রীনে TextView আপডেট করার জন্য কোড লিখবেন।

  1. activity_main.xml এ ফিরে যান ( অ্যাপ > res > লেআউট >activity_main.xml )
  2. TextView এ ক্লিক করুন।
  3. মনে রাখবেন যে আইডিটি textView
  4. MainActivity.kt খুলুন ( অ্যাপ > java > com.example.diceroller > MainActivity.kt )
  5. কোডের লাইনগুলি মুছুন যা Toast তৈরি করে এবং দেখায়।
rollButton.setOnClickListener {
  
}
  1. তাদের জায়গায়, TextView সংরক্ষণ করতে resultTextView নামে একটি নতুন ভেরিয়েবল তৈরি করুন।
  2. এর ID ব্যবহার করে লেআউটে textView খুঁজতে findViewById() ব্যবহার করুন এবং এটির একটি রেফারেন্স সংরক্ষণ করুন।
val resultTextView: TextView = findViewById(R.id.textView)
  1. রেজাল্ট টেক্সটভিউতে লেখাটিকে resultTextView "6" হিসেবে সেট করুন।
resultTextView.text = "6"

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

MainActivity ক্লাসটি এইরকম হওয়া উচিত:

class MainActivity : AppCompatActivity() {

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

       val rollButton: Button = findViewById(R.id.button)
       rollButton.setOnClickListener {
           val resultTextView: TextView = findViewById(R.id.textView)
           resultTextView.text = "6"
       }
   }
}
  1. অ্যাপটি চালান। বোতামে ক্লিক করুন। এটি TextView "6" এ আপডেট করা উচিত।

অনুপস্থিত শুধুমাত্র জিনিস আসলে পাশা ঘূর্ণায়মান হয়. আপনি পূর্ববর্তী কোডল্যাব থেকে Dice ক্লাস পুনরায় ব্যবহার করতে পারেন, যা একটি পাশা রোল করার জন্য যুক্তি পরিচালনা করে।

ডাইস ক্লাস যোগ করুন

  1. MainActivity ক্লাসে শেষ কোঁকড়ানো বন্ধনীর পরে, একটি roll() পদ্ধতিতে Dice ক্লাস তৈরি করুন।
class Dice(val numSides: Int) {

   fun roll(): Int {
       return (1..numSides).random()
   }
}
  1. লক্ষ্য করুন যে অ্যান্ড্রয়েড স্টুডিও একটি তরঙ্গায়িত ধূসর রেখা সহ numSides কে আন্ডারলাইন করে। (এটি প্রদর্শিত হতে একটি মুহূর্ত সময় নিতে পারে।)
  2. আপনার পয়েন্টারটি numSides উপর ঘোরান, এবং একটি পপআপ দেখাবে যে সম্পত্তি 'numSides' ব্যক্তিগত হতে পারে

numSides কে private হিসেবে চিহ্নিত করলে এটি শুধুমাত্র Dice ক্লাসের মধ্যেই অ্যাক্সেসযোগ্য হবে। যেহেতু একমাত্র কোড যা numSides ব্যবহার করবে তা Dice ক্লাসের ভিতরে, তাই এই যুক্তিটিকে Dice ক্লাসের জন্য private করা ঠিক আছে। আপনি পরবর্তী ইউনিটে private বনাম public ভেরিয়েবল সম্পর্কে আরও শিখবেন।

  1. এগিয়ে যান এবং 'numSides' 'ব্যক্তিগত' এ ক্লিক করে Android স্টুডিও থেকে প্রস্তাবিত সংশোধন করুন।

একটি rollDice() পদ্ধতি তৈরি করুন

এখন আপনি আপনার অ্যাপে একটি Dice ক্লাস যোগ করেছেন, আপনি এটি ব্যবহার করার জন্য MainActivity আপডেট করবেন। আপনার কোড আরও ভালভাবে সংগঠিত করতে, একটি ফাংশনে একটি পাশা রোল করার সমস্ত যুক্তি রাখুন৷

  1. ক্লিক লিসেনারে কোডটি প্রতিস্থাপন করুন যা টেক্সটটিকে "6" এ rollDice() এ কল দিয়ে সেট করে।
rollButton.setOnClickListener {
   rollDice()
}
  1. যেহেতু rollDice() এখনও সংজ্ঞায়িত করা হয়নি, Android Studio একটি ত্রুটি ফ্ল্যাগ করে এবং rollDice() লাল রঙে দেখায়।
  2. আপনি যদি rollDice() উপর আপনার পয়েন্টারটি হোভার করেন, তাহলে অ্যান্ড্রয়েড স্টুডিও সমস্যা এবং কিছু সম্ভাব্য সমাধান প্রদর্শন করে।

  1. আরও অ্যাকশনে ক্লিক করুন... যা একটি মেনু নিয়ে আসে। অ্যান্ড্রয়েড স্টুডিও আপনার জন্য আরও কাজ করার প্রস্তাব দেয়!

  1. ক্রিয়েট ফাংশন 'রোলডাইস' নির্বাচন করুন । অ্যান্ড্রয়েড স্টুডিও MainActivity ভিতরে ফাংশনের জন্য একটি খালি সংজ্ঞা তৈরি করে।
private fun rollDice() {
    TODO("Not yet implemented")
}

একটি নতুন ডাইস অবজেক্ট ইনস্ট্যান্স তৈরি করুন

এই ধাপে আপনি rollDice() পদ্ধতিতে একটি ডাইস তৈরি এবং রোল করবেন এবং তারপরে TextView এ ফলাফল প্রদর্শন করবেন।

  1. rollDice() এর ভিতরে, TODO() কলটি মুছুন।
  2. 6 দিক দিয়ে একটি পাশা তৈরি করতে কোড যোগ করুন।
val dice = Dice(6)
  1. roll() পদ্ধতিতে কল করে ডাইস রোল করুন, এবং diceRoll নামক একটি ভেরিয়েবলে সংরক্ষণ করুন।
val diceRoll = dice.roll()
  1. findViewById() কল করে TextView খুঁজুন।
val resultTextView: TextView = findViewById(R.id.textView)

পরিবর্তনশীল diceRoll একটি সংখ্যা, কিন্তু TextView পাঠ্য ব্যবহার করে। আপনি diceRolltoString() মেথড ব্যবহার করে এটিকে একটি স্ট্রিং-এ রূপান্তর করতে পারেন।

  1. diceRoll একটি স্ট্রিংয়ে রূপান্তর করুন এবং resultTextView পাঠ্যটি আপডেট করতে এটি ব্যবহার করুন।
resultTextView.text = diceRoll.toString()

এই rollDice() পদ্ধতির মত দেখায়:

private fun rollDice() {
    val dice = Dice(6)
    val diceRoll = dice.roll()
    val resultTextView: TextView = findViewById(R.id.textView)
    resultTextView.text = diceRoll.toString()
}
  1. আপনার অ্যাপ চালান। ডাইস ফলাফল 6 ছাড়াও অন্যান্য মান পরিবর্তন করা উচিত! যেহেতু এটি 1 থেকে 6 পর্যন্ত একটি এলোমেলো সংখ্যা, তাই মান 6 কখনও কখনও প্রদর্শিত হতে পারে।

হুররে, তুমি রক!

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

পেশাদার অ্যান্ড্রয়েড বিকাশকারীরা তাদের কোড লেখার সময় এই অভ্যাসগুলি অনুশীলন করে।

অ্যান্ড্রয়েড স্টাইল গাইড

আপনি যখন দলগুলিতে কাজ করেন, দলের সদস্যদের জন্য একইভাবে কোড লেখার জন্য এটি আদর্শ, তাই কোড জুড়ে কিছুটা সামঞ্জস্য রয়েছে। এই কারণেই Android-এর কাছে Android কোড কীভাবে লিখতে হয় তার জন্য একটি স্টাইল গাইড রয়েছে—নামকরণের নিয়মাবলী, বিন্যাসকরণ এবং অনুসরণ করার জন্য অন্যান্য ভাল অনুশীলন৷ আপনি যখন Android কোড লেখেন তখন এই নির্দেশিকাগুলি মেনে চলুন: Android বিকাশকারীদের জন্য Kotlin Style Guide

নীচে কয়েকটি উপায়ে আপনি শৈলী নির্দেশিকা মেনে চলতে পারেন।

আপনার কোড পরিষ্কার করুন

আপনার কোড ঘনীভূত করুন

সংক্ষিপ্ত সংখ্যক লাইনে কোড ঘনীভূত করে আপনি আপনার কোডটিকে আরও সংক্ষিপ্ত করতে পারেন। উদাহরণস্বরূপ, এখানে সেই কোড যা Button ক্লিক শ্রোতাকে সেট করে।

rollButton.setOnClickListener {
    rollDice()
}

যেহেতু ক্লিক শ্রোতার জন্য নির্দেশাবলী শুধুমাত্র 1 লাইন দীর্ঘ, আপনি rollDice() পদ্ধতি কল এবং কোঁকড়া ধনুর্বন্ধনী সব এক লাইনে ঘনীভূত করতে পারেন। এটা কি মত দেখায়. তিন লাইনের বদলে এক লাইন!

rollButton.setOnClickListener { rollDice() }

আপনার কোড পুনরায় ফর্ম্যাট করুন

এখন আপনি আপনার কোডটি Android এর জন্য প্রস্তাবিত কোড ফর্ম্যাটিং নিয়মাবলী অনুসরণ করে তা নিশ্চিত করতে পুনরায় ফর্ম্যাট করবেন৷

  1. MainActivity.kt ক্লাসে, উইন্ডোজে (অথবা Mac- Command+A ) কীবোর্ড শর্টকাট Control+A দিয়ে ফাইলের সমস্ত পাঠ্য নির্বাচন করুন। অথবা আপনি অ্যান্ড্রয়েড স্টুডিও এডিট > সব নির্বাচন করুন এর মেনুতে যেতে পারেন।
  2. ফাইলে নির্বাচিত সমস্ত পাঠ্য সহ, Android স্টুডিও মেনু কোড > রিফরম্যাট কোডে যান বা কীবোর্ড শর্টকাট Ctrl+Alt+L (বা Mac-এ Command+Option+L ) ব্যবহার করুন।

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

আপনার কোড মন্তব্য করুন

আপনার লেখা কোডে কী ঘটছে তা বর্ণনা করতে আপনার কোডে কিছু মন্তব্য যোগ করুন। কোডটি আরও জটিল হওয়ার সাথে সাথে আপনি যেভাবে কাজ করেছেন সেভাবে কাজ করার জন্য আপনি কেন কোডটি লিখেছেন তা নোট করাও গুরুত্বপূর্ণ। আপনি যদি পরিবর্তন করতে পরে কোডটিতে ফিরে আসেন, তাহলে কোডটি কী করে তা এখনও স্পষ্ট হতে পারে, কিন্তু আপনি কেন এটি লিখেছিলেন সেভাবে আপনি মনে করতে পারবেন না।

প্রতিটি ক্লাসের জন্য একটি মন্তব্য যোগ করা সাধারণ ( MainActivity এবং Dice হল একমাত্র ক্লাস যা আপনার অ্যাপে আছে) এবং প্রতিটি পদ্ধতি আপনি লেখেন। আপনার মন্তব্যের শুরুতে এবং শেষে /** এবং **/ চিহ্নগুলি ব্যবহার করে সিস্টেমকে বলুন যে এটি কোড নয়। এই লাইনগুলি উপেক্ষা করা হবে যখন সিস্টেম আপনার কোড নির্বাহ করে।

একটি ক্লাসে একটি মন্তব্যের উদাহরণ:

/**
* This activity allows the user to roll a dice and view the result
* on the screen.
*/
class MainActivity : AppCompatActivity() {

একটি পদ্ধতিতে একটি মন্তব্যের উদাহরণ:

/**
* Roll the dice and update the screen with the result.
*/
private fun rollDice() {

একটি পদ্ধতির মধ্যে, আপনি মন্তব্য যোগ করতে মুক্ত যদি এটি আপনার কোডের পাঠককে সাহায্য করে। মনে রাখবেন যে আপনি আপনার মন্তব্যের শুরুতে // প্রতীক ব্যবহার করতে পারেন। একটি লাইনে // চিহ্নের পরে সবকিছু একটি মন্তব্য হিসাবে বিবেচিত হয়।

একটি পদ্ধতির ভিতরে 2টি মন্তব্যের উদাহরণ:

private fun rollDice() {
   // Create new Dice object with 6 sides and roll it
   val dice = Dice(6)
   val diceRoll = dice.roll()

   // Update the screen with the dice roll
   val resultTextView: TextView = findViewById(R.id.textView)
   resultTextView.text = diceRoll.toString()
}
  1. এগিয়ে যান এবং আপনার কোডে মন্তব্য যোগ করতে কিছু সময় নিন।
  2. এই সমস্ত মন্তব্য এবং বিন্যাস পরিবর্তনের সাথে, এটি এখনও প্রত্যাশিত হিসাবে কাজ করে তা নিশ্চিত করতে আপনার অ্যাপটি আবার চালানোর জন্য এটি ভাল অনুশীলন।

আপনি আপনার কোড মন্তব্য করতে পারে যে একটি উপায় জন্য সমাধান কোড দেখুন.

এই কোডল্যাবের সমাধান কোডটি নীচে দেখানো প্রকল্প এবং মডিউলে রয়েছে।

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

  1. অ্যান্ড্রয়েড স্টুডিও শুরু করুন।
  2. অ্যান্ড্রয়েড স্টুডিওতে স্বাগতম উইন্ডোতে, সংস্করণ নিয়ন্ত্রণ থেকে প্রজেক্ট চেক আউট ক্লিক করুন।
  3. গিট নির্বাচন করুন।

  1. ক্লোন রিপোজিটরি ডায়ালগে, প্রদত্ত কোড URL টি URL বক্সে পেস্ট করুন।
  2. পরীক্ষা বোতামে ক্লিক করুন, অপেক্ষা করুন, এবং নিশ্চিত করুন যে একটি সবুজ পপআপ বুদবুদ আছে যা বলছে সংযোগ সফল
  3. ঐচ্ছিকভাবে, নির্দেশিত ডিফল্টের চেয়ে ভিন্ন কিছুতে নির্দেশিকা পরিবর্তন করুন।

  1. ক্লোন ক্লিক করুন। অ্যান্ড্রয়েড স্টুডিও আপনার কোড আনা শুরু করে।
  2. সংস্করণ নিয়ন্ত্রণ পপআপ থেকে চেকআউটে , হ্যাঁ ক্লিক করুন।

  1. অ্যান্ড্রয়েড স্টুডিও খোলার জন্য অপেক্ষা করুন।
  2. আপনার কোডল্যাব স্টার্টার বা সমাধান কোডের জন্য সঠিক মডিউল নির্বাচন করুন।

  1. রান বোতামে ক্লিক করুন আপনার কোড তৈরি এবং চালানোর জন্য।
  • লেআউট এডিটর ব্যবহার করে একটি অ্যান্ড্রয়েড অ্যাপে একটি Button যোগ করুন।
  • অ্যাপে ইন্টারেক্টিভ আচরণ যোগ করতে MainActivity.kt ক্লাস পরিবর্তন করুন।
  • আপনি সঠিক পথে আছেন তা যাচাই করার জন্য একটি অস্থায়ী সমাধান হিসাবে একটি Toast বার্তা পপ আপ করুন৷
  • একটি Button ক্লিক করার সময় আচরণ যোগ করতে setOnClickListener() ব্যবহার করে একটি Button জন্য একটি অন-ক্লিক শ্রোতা সেট করুন।
  • যখন অ্যাপটি চলছে, আপনি TextView , Button বা লেআউটের অন্যান্য UI উপাদানগুলিতে কল করার মাধ্যমে স্ক্রীন আপডেট করতে পারেন৷
  • অন্য যারা আপনার কোড পড়ছেন তারা বুঝতে সাহায্য করার জন্য আপনার কোড মন্তব্য করুন আপনার পদ্ধতি কি ছিল।
  • আপনার কোড পুনরায় ফর্ম্যাট করুন এবং আপনার কোড পরিষ্কার করুন।

নিম্নলিখিতগুলি করুন:

  1. অ্যাপে আরেকটি ডাইস যোগ করুন। রোল বোতামে ক্লিক করলে 2টি পাশা রোল করা উচিত। ফলাফলগুলি 2টি ভিন্ন TextViews স্ক্রিনে প্রদর্শিত হওয়া উচিত।

নিজের কাজের খোজ নাও:

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