options menu click event handler

এই পর্বে আমরা দেখবো Options Menu এর অপশন গুলো কিভাবে onClick ম্যাথড দ্বারা হ্যান্ডেল করতে পারি -

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

তো প্রথমেই colors.xml এ আইকন রিলেটেড কিছু কালার নেয়া যাক -

 <?xml version="1.0" encoding="utf-8"?>  
 <resources>  
   <color name="colorPrimary">#3F51B5</color>  
   <color name="colorPrimaryDark">#303F9F</color>  
   <color name="colorAccent">#FF4081</color>  
   

   <color name="blue">#4c6eb6</color>  
   <color name="blue_dark">#4e6d8b</color>  
   <color name="green">#20c726</color>  
   <color name="pink">#c741b8</color>
 
 </resources>  

এবার activity_main.xml এ -

 <?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:app="http://schemas.android.com/apk/res-auto"  
   xmlns:tools="http://schemas.android.com/tools"  
   android:layout_width="match_parent"  
   android:layout_height="match_parent"  
   android:orientation="vertical"  
   tools:context="com.example.user.timepicker.MainActivity"  
   android:id="@+id/changeColor">  
   <ImageView  
     android:id="@+id/imageview"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     />  
 </LinearLayout>  

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

options_menu.xml আগের মতই থাকবে । কোন চেঞ্জ হবে নাহ  -

 <?xml version="1.0" encoding="utf-8"?>  
 <menu xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:app="http://schemas.android.com/apk/res-auto">  
   <item android:id="@+id/facebook"  
     android:title="Facebook"  
     app:showAsAction="ifRoom"  
     android:icon="@drawable/facebook"></item>  
   <item android:id="@+id/twitter"  
     android:title="Twitter"  
     app:showAsAction="ifRoom"  
     android:icon="@drawable/twitter"></item>  
   <item android:id="@+id/whatsapp"  
     android:title="Whatsapp"  
     app:showAsAction="ifRoom"  
     android:icon="@drawable/whatsapp"></item>  
   <item android:id="@+id/instagram"  
     android:title="Instagram"  
     app:showAsAction="ifRoom"  
     android:icon="@drawable/instagram"></item>  
 </menu>  

এখন MainActivity.java  তে -

 public class MainActivity extends AppCompatActivity {  
   ImageView imageView;  

প্রথমে ইমেজভিউ এর অব্জেক্ট তৈরি করলাম

   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_main);  
     imageView = findViewById(R.id.imageview);  
   }  

এরপর ইমেজভিউ এর সাথে আইডি টা সংযোগ করে দিলাম ।

   @Override  
   public boolean onCreateOptionsMenu(Menu menu) {  
     MenuInflater menuInflater = getMenuInflater();  
     menuInflater.inflate(R.menu.options_menu,menu);  
     return super.onCreateOptionsMenu(menu);  
   }  

onCreateOptionsMenu টা একই রকম থাকবে ।

ক্লিক ইভেন্ট নিয়ে কাজ করার জন্য onOptionsItemSelected ম্যাথড নিয়ে কাজ করতে হবে -

   @Override  
   public boolean onOptionsItemSelected(MenuItem item) {  
     LinearLayout linearLayout ;  
     linearLayout = findViewById(R.id.changeColor);  

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

আমরা যেহেতু লিনিয়ার লেআউট ব্যাবহার করেছি এবং লেআউট এর কালার চেঞ্জ করবো তাই LinearLayout এর অব্জেক্ট তৈরি করলাম । এরপর সেটি xml এর আইডির সাথে সংযোগ করে দিলাম ।

     switch (item.getItemId()){  
       case R.id.facebook:  
         linearLayout.setBackgroundColor(getResources().getColor(R.color.blue));  
         imageView.setImageResource(R.drawable.facebook);  
         break;  

আমরা কোন আইকন টি সিলেক্ট করছি সেটা নির্ধারণ করার জন্য সুইচ ব্যাবহার করলাম । সুইচ এর ভিতর ভ্যালু হিসেবে onOptionsItemSelected ম্যাথডের item নিয়ে getItemId() দিয়ে যে আইডি সিলেক্ট করবে সেই ভ্যালু-টির আইডি আসবে ।

এখন আইডি যদি ফেসবুক হয় তাহলে লিনিয়ার লেআউট আর ব্যাকগ্রাউন্ড কালার চেঞ্জ হবে যেটি আমাদের অ্যাপের resource এর ভিতরের color ডিরেক্টরি ফাইলের ভিতর আছে । এবং ইমেজভিউতে drawable  এর ভিতরে রাখা ফেসবুক আইকন টি সেট করে দিলাম । আমরা জানি সুইচ কেস এ প্রতি স্টেট্মেন্ট এর পর break ব্যাবহার করতে হয় । এভাবে প্রতি আইটেম এর জন্য কেস ব্যাবহার করতে হবে -

       case R.id.twitter:  
         linearLayout.setBackgroundColor(getResources().getColor(R.color.blue_dark));  
         imageView.setImageResource(R.drawable.twitter);  
         break;  
       case R.id.whatsapp:  
         linearLayout.setBackgroundColor(getResources().getColor(R.color.green));  
         imageView.setImageResource(R.drawable.whatsapp);  
         break;  
       case R.id.instagram:  
         linearLayout.setBackgroundColor(getResources().getColor(R.color.pink));  
         imageView.setImageResource(R.drawable.instagram);  
         break;  
     }  
     return super.onOptionsItemSelected(item);  
   }  

এবার অ্যাপটি রান করুন 😊😊😊
MainActivity.java  ফুল কোড -

 package com.example.user.timepicker;  
 import android.app.DatePickerDialog;  
 import android.app.TimePickerDialog;  
 import android.support.v7.app.AppCompatActivity;  
 import android.os.Bundle;  
 import android.view.Menu;  
 import android.view.MenuInflater;  
 import android.view.MenuItem;  
 import android.view.View;  
 import android.widget.Button;  
 import android.widget.DatePicker;  
 import android.widget.ImageView;  
 import android.widget.LinearLayout;  
 import android.widget.TextView;  
 import android.widget.TimePicker;  
 import java.text.DateFormat;  
 import java.text.SimpleDateFormat;  
 import java.util.Calendar;  
 import java.util.Date;  
 public class MainActivity extends AppCompatActivity {  
   ImageView imageView;  
   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_main);  
     imageView = findViewById(R.id.imageview);  
   }  
   @Override  
   public boolean onCreateOptionsMenu(Menu menu) {  
     MenuInflater menuInflater = getMenuInflater();  
     menuInflater.inflate(R.menu.options_menu,menu);  
     return super.onCreateOptionsMenu(menu);  
   }  
   @Override  
   public boolean onOptionsItemSelected(MenuItem item) {  
     LinearLayout linearLayout ;  
     linearLayout = findViewById(R.id.changeColor);  
     switch (item.getItemId()){  
       case R.id.facebook:  
         linearLayout.setBackgroundColor(getResources().getColor(R.color.blue));  
         imageView.setImageResource(R.drawable.facebook);  
         break;  
       case R.id.twitter:  
         linearLayout.setBackgroundColor(getResources().getColor(R.color.blue_dark));  
         imageView.setImageResource(R.drawable.twitter);  
         break;  
       case R.id.whatsapp:  
         linearLayout.setBackgroundColor(getResources().getColor(R.color.green));  
         imageView.setImageResource(R.drawable.whatsapp);  
         break;  
       case R.id.instagram:  
         linearLayout.setBackgroundColor(getResources().getColor(R.color.pink));  
         imageView.setImageResource(R.drawable.instagram);  
         break;  
     }  
     return super.onOptionsItemSelected(item);  
   }  
 }  

তাহলে আমাদের অ্যাপটি যেরকম দেখাবে । আমরা যদি টুইটারের আইকন এর উপর ক্লিক করি - 





মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

Spinner View - 11 ( Android Bangla Tutorial)

ImageView ( Android Bangla Tutorial - )

Toggle Button - 10 ( Android Bangla Tutorial)