options menu click event handler
এই পর্বে আমরা দেখবো Options Menu এর অপশন গুলো কিভাবে onClick ম্যাথড দ্বারা হ্যান্ডেল করতে পারি -
আমরা আগের পর্বে সোশ্যাল মিডিয়ার নামের একটি লিস্ট তৈরি করেছিলাম । এই পর্বে সেই সোশ্যাল মিডিয়ার যে অপশন এ ক্লিক করা হবে , পুরো লেআউট এর কালার চেঞ্জ হয়ে অনেকটা সেরকম হবে এবং আইকনটি লেআউট এর ভিতর শো করবে , এরকম কিছু করবো ।
তো প্রথমেই colors.xml এ আইকন রিলেটেড কিছু কালার নেয়া যাক -
এবার activity_main.xml এ -
এখানে রুট লেআউট এর একদম শেষে id ট্যাগ নিয়ে লেআউট এর একটি আইডি দিয়ে দিলাম যাতে এই লেআউট নিয়ে কাজ করার সময় আইডির সাহায্যে লেআউট টি নিয়ে কাজ করতে পারি । এরপর ইমেজ ভিউ নিলাম যাতে কোন অপশন এ ক্লিক করলে সেটির আইকন এই ভিউতে দেখাতে পারি ।
options_menu.xml আগের মতই থাকবে । কোন চেঞ্জ হবে নাহ -
এখন MainActivity.java তে -
প্রথমে ইমেজভিউ এর অব্জেক্ট তৈরি করলাম
এরপর ইমেজভিউ এর সাথে আইডি টা সংযোগ করে দিলাম ।
onCreateOptionsMenu টা একই রকম থাকবে ।
ক্লিক ইভেন্ট নিয়ে কাজ করার জন্য onOptionsItemSelected ম্যাথড নিয়ে কাজ করতে হবে -
onOptionsItemSelected ম্যাথডের ভিতর মেন্যুআইটেম এর লিস্ট হিসেবে item অব্জেক্ট আছে যেটি কল করার মাধ্যমে আমরা লিস্ট এর অপশন গুলো নিয়ে কাজ করতে পারি ।
আমরা যেহেতু লিনিয়ার লেআউট ব্যাবহার করেছি এবং লেআউট এর কালার চেঞ্জ করবো তাই LinearLayout এর অব্জেক্ট তৈরি করলাম । এরপর সেটি xml এর আইডির সাথে সংযোগ করে দিলাম ।
আমরা কোন আইকন টি সিলেক্ট করছি সেটা নির্ধারণ করার জন্য সুইচ ব্যাবহার করলাম । সুইচ এর ভিতর ভ্যালু হিসেবে onOptionsItemSelected ম্যাথডের item নিয়ে getItemId() দিয়ে যে আইডি সিলেক্ট করবে সেই ভ্যালু-টির আইডি আসবে ।
এখন আইডি যদি ফেসবুক হয় তাহলে লিনিয়ার লেআউট আর ব্যাকগ্রাউন্ড কালার চেঞ্জ হবে যেটি আমাদের অ্যাপের resource এর ভিতরের color ডিরেক্টরি ফাইলের ভিতর আছে । এবং ইমেজভিউতে drawable এর ভিতরে রাখা ফেসবুক আইকন টি সেট করে দিলাম । আমরা জানি সুইচ কেস এ প্রতি স্টেট্মেন্ট এর পর break ব্যাবহার করতে হয় । এভাবে প্রতি আইটেম এর জন্য কেস ব্যাবহার করতে হবে -
এবার অ্যাপটি রান করুন 😊😊😊
MainActivity.java ফুল কোড -
তাহলে আমাদের অ্যাপটি যেরকম দেখাবে । আমরা যদি টুইটারের আইকন এর উপর ক্লিক করি -
আমরা আগের পর্বে সোশ্যাল মিডিয়ার নামের একটি লিস্ট তৈরি করেছিলাম । এই পর্বে সেই সোশ্যাল মিডিয়ার যে অপশন এ ক্লিক করা হবে , পুরো লেআউট এর কালার চেঞ্জ হয়ে অনেকটা সেরকম হবে এবং আইকনটি লেআউট এর ভিতর শো করবে , এরকম কিছু করবো ।
তো প্রথমেই 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);
}
}
তাহলে আমাদের অ্যাপটি যেরকম দেখাবে । আমরা যদি টুইটারের আইকন এর উপর ক্লিক করি -
মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন