Android Custom ListView (Adding Images, text)

1.mylist.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">
<TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp" />
</LinearLayout>

2.mainactivity.java

package com.example.listviewcustom;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = findViewById(R.id.list);
        final String [] hardware = new String[] {"keyboard","mouse","microphone","router"};
        int[] imagearray= new int[]{R.drawable.ic_keyboard_black_24dp,R.drawable.ic_mouse_black_24dp,R.drawable.ic_keyboard_voice_black_24dp,R.drawable.ic_router_black_24dp};
    CustomArrayAdapter customArrayAdapter = new CustomArrayAdapter(this,hardware,imagearray);
    listView.setAdapter(customArrayAdapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(getApplicationContext(),hardware[position].toString(),Toast.LENGTH_SHORT).show();
        }
    });
    }
}



mainactivity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context=".MainActivity">

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</ListView>
</android.support.constraint.ConstraintLayout>

arrayadapter.java

package com.example.listviewcustom;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomArrayAdapter extends BaseAdapter {

Context context;
String[] hardwarename;
int[] image;

public CustomArrayAdapter(Context context, String[] hardwarename, int[] image) {
this.context = context;
this.hardwarename = hardwarename;
this.image = image;
}

@Override
public int getCount() {
return hardwarename.length;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.mylist,null);
TextView textView = view.findViewById(R.id.text);
ImageView imageView = view.findViewById(R.id.image);
textView.setText(hardwarename[position]);
imageView.setImageResource(image[position]);
return view;
}
}

android gridiew example

1.1 Android Layout file – res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView1"
    android:numColumns="auto_fit"
    android:gravity="center"
    android:columnWidth="50dp"
    android:stretchMode="columnWidth"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</GridView>

1.2 Activityjava

package com.mkyong.android;

import android.app.Activity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;

public class GridViewActivity extends Activity {

	GridView gridView;

	static final String[] numbers = new String[] { 
			"A", "B", "C", "D", "E",
			"F", "G", "H", "I", "J",
			"K", "L", "M", "N", "O",
			"P", "Q", "R", "S", "T",
			"U", "V", "W", "X", "Y", "Z"};

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.main);

		gridView = (GridView) findViewById(R.id.gridView1);

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

		gridView.setAdapter(adapter);

		gridView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
				int position, long id) {
			   Toast.makeText(getApplicationContext(),
				((TextView) v).getText(), Toast.LENGTH_SHORT).show();
			}
		});

	}

}

Android Floating Action Button

এন্ড্রোইড ফ্লোটিং অ্যাকশন বাটন হলো গোলাকার বাটন। এটা ইউজার ইন্টারফেসের উপরে অবস্থান করে এবং ক্লিক করলে কোন ইভেন্ট সংঘটিত করে। এন্ড্রোইড ফ্লোটিং অ্যাকশন বাটন 3টা সাইজ এ ডিফাইন করা যায় normal এবং mini এবং auto ।

Add Design Support Libray In app Level Gradle.build File . Then Go To Mainactivity.xml file

  <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:src="@android:drawable/ic_dialog_email"/>

Go To MainActivity.java And Add This Line

    FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // We are showing only toast message. However, you can do anything you need.
                Toast.makeText(getApplicationContext(), "You clicked Floating Action Button", Toast.LENGTH_SHORT).show();
            }
        });

Attributes of Android Floating Action Button Widget

Some of the popular attributes of android Floating Action Button widget are –

Sr.XML AttributesDescription
1app:fabCustomSizeSets the size of the button in pixels. If set to NO_CUSTOM_SIZE, custom size will not be used and size will be calculated based on the fabSize attribute.
2app:fabSizeSets the size of the button. There are 3 options available – normal, mini and auto. normal is larger than mini. auto will choose size based on the screen size.
3app:elevationSets elevation of the button.
4app:rippleColorSets ripple colour for button
5app:useCompatPaddingSets inner padding of button on platform lollipop and after.

Android Connect With Firebase

To create a new Firebase project, follow the below mentioned steps :-  

1. Open the URL – https://console.firebase.google.com

2. Then click on “Add Project”.

3. Enter the Firebase Project name and accept the conditions and then proceed with clicking on “Continue” button.

4. On the next Welcome screen, click on “Add Firebase to your Android app“. Enter the package name and click on Next.

5 . Firebase App, Register your app id and download the google-services.json file. Add it to your app folder

Specify Maven repository URL
  1. Add Google services classpath as below
  2. Add maven repository url
/ Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
            classpath 'com.android.tools.build:gradle:3.2.1'
          classpath 'com.google.gms:google-services:4.2.0'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com" // Google's Maven repository
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
Add Firebase Dependencies

Add them in you app level(app folder) build.gradle, then Add app lavel Dependency

    implementation 'com.google.firebase:firebase-core:16.0.9'
    implementation 'com.google.firebase:firebase-firestore:19.0.0'
    implementation 'com.google.firebase:firebase-database:17.0.0'
    implementation  'com.google.firebase:firebase-auth:17.0.0'


Add Bottom Of File App Level Dependency

apply plugin: 'com.google.gms.google-services'


Now Sync And Install and unstall App

Latest Firebase Release Note Url

Android Tabhost Example

acrtivity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context=".MainActivity">
    <TabHost android:id="@+id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <TabWidget android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
            <FrameLayout android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
                <LinearLayout
                    android:id="@+id/tab1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <Button
                        android:id="@+id/button"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="tab1" />
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/tab2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <Button
                        android:id="@+id/button2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="tab2" />
                </LinearLayout>
            </FrameLayout>
        </LinearLayout>
    </TabHost>
</android.support.constraint.ConstraintLayout>

MainActivity.java

package com.example.ppc.tabhost;

import android.app.TabActivity;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TabHost tabs = (TabHost) findViewById(R.id.tabhost);
        tabs.setup();
        TabHost.TabSpec spec = tabs.newTabSpec("tag1");
        spec.setContent(R.id.tab1);
        spec.setIndicator("First");
        tabs.addTab(spec);
        spec = tabs.newTabSpec("tag2");
        spec.setContent(R.id.tab2);
        spec.setIndicator("second");
        tabs.addTab(spec);

        tabs.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
            @Override
            public void onTabChanged(String tabId) {
                if (tabId.equals("tag1")){
                   Toast.makeText(getApplicationContext(),"This IS Tab One",Toast.LENGTH_LONG).show();
                }

                else if (tabId.equals("tag2")){
                    Toast.makeText(getApplicationContext(),"This IS Tab Two",Toast.LENGTH_LONG).show();
                }
            }
        });

    }
}


জাভা Constructors (কন্সট্রাক্টর)

Constructors (কন্সট্রাক্টর) কি ?
Constructors (কন্সট্রাক্টর) একটা ব্লক কোড যা দেখতে অনেকটা সাধারণ কোডব্লকের মতো তবে এর নামকরণ করা হয় ক্লাসের নামে। যদি ক্লাস এর নাম টেস্ট হয় তবে কন্সট্র্রাক্টর এর নাম হবে টেস্ট। উধারণস্বরূপ Test (){}.কন্সট্র্রাক্টর এর কাজ অবজেক্ট তৈরির পরপরই শুরু হয়ে যায়.যদি আমরা কোনো কন্সট্র্রাক্টর ডিফাইন না করি তাহলে কম্পাইলার কোড নিজে থেকেই একটি খালি কন্সট্র্রাক্টর যোগ করে তারপরে প্রোগ্রাম এর কাজ শুরু করে।কারণ কোনো ক্লাস আমরা যখন কম্পাইলার এর নিকট পাঠায় তখন কম্পাইলার প্রথমে কন্সট্রাক্টর মেথড চেক করে। যদি কনস্ট্রাক্টর মেথড ইউজার দ্বারা বানানো থাকে তখন কম্পাইলার কন্সট্রাক্টর বানানো ছাড়াই কোড রান করার চেষ্টা করে। যদি কনস্ট্রাক্টর মেথড ইউজার দ্বারা বানানো না থাকে তখন কম্পাইলার ডিফাউল্ট ভাবে একটি এম্পটি কন্সট্রাক্টর বানাই এবং তারপরে কোড রান করার চেষ্টা করে যেমন আমরা যদি এভাবে ক্লাস ডিফাইন করি এবং অবজেক্ট তৈরী করি তাহলে কম্পাইলার নিচের মতো করে কোড রান করবে।
এটা হলো আমাদের কোড
class Test {}
Test obj = new Test ();
আর কম্পাইলার রান করবে এরকম

class Test {
// ডিফল্ট কন্সট্রাক্টর যা কম্পাইলার নিজে তৈরী করে রান করেছে। কম্পাইলার তখনই নিজে থেকে কন্সট্রাক্টর তৈরী করবে যখন আমরা কোনো কন্সট্রাক্টর ক্লাসের মধ্যে কল না করি.
Test (){
}
}
Test obj = new Test ();

Constructors (কন্সট্রাক্টর) কেন তৈরী করতে হয় ?
মূলত অবজেক্ট তৈরির সাথে সাথে ডিফল্ট কিছু কার্য সম্পাদনের জন্য Constructors (কন্সট্রাক্টর) তৈরী করা হয়। যেমন কোনো মেসেজ শো করা অথবা ডিফল্ট কিছু ভ্যারিয়েবল এর ভ্যালু সেট করা অথবা ডাটাবেসের কনফিগার সেট করা অথবা অবজেক্ট তৈরির সাথে সাথে ডাটাবেস কানেকশন তৈরী করা ইত্যাদি।

Constructors (কন্সট্রাক্টর) এর প্রকারভেদঃ
১.ডিফল্ট Constructors (কন্সট্রাক্টর) . (যেটা কম্পাইলার নিজেই তৈরী করে ) .
২. নো আর্গুমেন্ট NO ARGUMENT (কন্সট্রাক্টর) . (আমরা ক্লাস এ যদি কোন Constructors কল করি এবং তার যদি কোনো আর্গুমেন্ট না থাকে অর্থাৎ empty পেরামিটার এর ফাঙ্কশন এর মত (কন্সট্রাক্টর) হয় তখন তাকে নো আর্গুমেন্ট Constructors (কন্সট্রাক্টর) বলে.যেমন public TEST (){} .

৩. Parameterized constructor বা প্যারামিটার যুক্ত কনস্ট্রাক্টর। (আমরা ক্লাস এ যদি কোন Constructors কল করি এবং তার যদি কোনো আর্গুমেন্ট থাকে তখন তাকে Parameterized constructor বা প্যারামিটার যুক্ত কনস্ট্রাক্টর বলে। যেমন public TEST (int name ){}.

Constructor (কন্সট্রাক্টর) Chaining কি ?

Constructor (কন্সট্রাক্টর) Chaining কি ?
একটা ক্লাসে একের অধিক Constructor (কন্সট্রাক্টর) থাকতে পারে অথবা আমরা প্যারামিটার এর সংখ্যা ভিন্ন করে অথবা প্যারামিটার এবং নন প্যারামিটার সহ তিনটি Constructor (কন্সট্রাক্টর) বানিয়ে রাখতে পারি। যখন একই ক্লাসের একটি Constructor (কন্সট্রাক্টর) ওই ক্লাসের আরেকটি Constructor (কন্সট্রাক্টর) কল করে তখন তাকে Constructor (কন্সট্রাক্টর) Chaining বলে।

উপরের কোডটি লক্ষ্য করলে আমরা যে ব্যাখ্যা পাই তা হলো
this (“begginerbook .com “); এখানে this এটা এই ক্লাস কে বোঝায় সুতরাং যদি এই ক্লাসের নাম Myclass হয় তবে this (“begginerbook .com “); মানে
Myclass (“begginerbook .com “); অর্থাৎ এটা এই ক্লাসের কন্সট্রাক্টর কল করেছে।

Super() কন্সট্রাক্টর

যখন আমরা কোন ক্লাস কে এক্সটেনডস করে কাজ করি তখন প্যারেন্ট ক্লাসের সকল মেথড ও প্রপার্টি ব্যবহার করতে পারি এটা আগেই জানি। মনে কর Student class কে ব্রিলিয়ান্ট ক্লাস এক্সটেনডস করেছে। ব্রিলিয়ান্ট ক্লাস এ একটা কনস্ট্রাক্টর আছে এবং Student ক্লাস এ একটা একই ধরণের কনস্ট্রাক্টর আছে। যদি ব্রিলিয়ান্ট ক্লাস এ কনস্ট্রাক্টর না থাকতো এবং আমরা কন্সট্রাক্টর কল করতাম তখন প্যারেন্ট ক্লাস বা Student ক্লাস এর কন্সট্রাক্টর কল হতো। আর যদি ব্রিলিয়ান্ট ক্লাস এ কন্সট্রাক্টর কল থাকে তাহলে ব্রিলিয়ান্ট ক্লাস এ কন্সট্রাক্টর কল হবে। যদি এমন হয় প্যারেন্ট এবং চাইল্ড দুই ক্লাস এই কন্সট্রাক্টর কল আছে এমতাবস্থায় আমরা যদি চাইল্ড ক্লাস এর অবজেক্ট তৈরী করি তাহলে ডিফল্ট ভাবে চাইল্ড ক্লাস এর কন্সট্রাক্টর কল হবে কিন্তু আমরা যদি চাই প্যারেন্ট বা বেজ ক্লাসের কন্সট্রাক্টর কল হবে তখন super () কীওয়ার্ড ব্যবহার হবে।

Android development Time Face Error And solution

  1. Android Resource File Linking Fail . Android R.id Red Color

Solution : From Build Menu Clean Project And Rebuild Project.

2. implementation 'com.android.support:appcompat-v7:28.0.0' Red Color error.
Solution : Add below Two line After above Line or Last Line.

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'

3. Android Firebase Auth Gradle dependency Error
Solution : Android Firebase core And Other Libreary Version same like This Way
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'


3 . BUILD TIME UNSPECTED PROCESS ERROR

Solution : go To Project level Garadle.build And Change Your Gradle Version To If Say Any Update Dont update.
classpath 'com.android.tools.build:gradle:3.3.2'

4. Multidex Problem

 Solution : Add Dependency In App level gradle.build And Enable Multidex True in Default Config In App.build.gradle file .
 defaultConfig { 
  //...
  multiDexEnabled true 
 }
compile 'com.android.support:multidex:1.0.1' 

5.

Solution: Added two lines in gradle.properties file:
 These two lines automatically resolved my dependency conflicts between google's files and third party dependencies. Here's the link to follow: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project

android.useAndroidX=true
android.enableJetifier=true

5

ERROR: Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add ‘tools:replace=”android:appComponentFactory”‘ to element at AndroidManifest.xml:5:5-19:19 to override.

Solution : Goto gradle.properties file: And Write And Sync

android.useAndroidX=true
android.enableJetifier=true

Introduction of Some Basic Things CLASS (4)

নতুন প্রোজেক্ট খোলার সাথেই যদি নিচের ছবির মত উইন্ড দেখা নাহ যায় তবে ৩ নম্বর বক্স এর পাশে যে  Project লেখা আছে সেখানে ক্লিক করুন । ১ নম্বর বক্স এ দেখতে পাই MainActivity.java ( এখানে আমরা আমাদের জাভা কোডগুলো লিখবো ) । তার পাশেই আর একটি xml ফাইল আছে যার নাম activity_main.xml  ( বক্স নং ২)। এই ফাইলটির উপর ক্লিক করুন ( এখানে অ্যাপের ডিজাইন করা হয়) ।

এখন ৪ নম্বর বক্সে আসি । এখানে ২ টা জিনিস দেখতে পাচ্ছেন, Design এবং Text। এর মানে আমরা অ্যাপের ডিজাইন ২ ভাবে করতে পারি ( ড্রাগ-ড্রপ এর মাধ্যমে , আবার হাতে লিখে  – আমরা হাতে লিখেই শিখবো , ড্রাগ-ড্রপ দ্বারা অ্যাপ ডিজাইন করা মোটেও ভালো প্র্যাকটিস নয়)। এখন নিচের Text বাটনে ক্লিক করলে দেখতে পাবেন লেআউট ফাইলে ১টি টেক্সভিউ (Hello World) অটোমেটিক শো করছে । বাই ডিফ্লট যে লেআউট শো করেছে সেটি হল ConstraintLayout

টেক্সভিউটি মোবাইলে কোন অবস্থানে রয়েছে তা দেখতে ডান পাশের একদম উপরে Preview  তে ক্লিক করুন ( যদি উপরের ছবি অনুযায়ী মোবাইল শো নাহ করে) ।

এখন আপনি যদি চান এখানে আপনার নাম দেখাবেন তাহলে   <TextView  ট্যাগের ভিতরে যেয়ে
android:text=”Hello World!” যে লেখা আছে সেখান কেটে দিয়ে আপনার নাম লিখে দিন বা যা খুশি তাই । যেমন  android:text=”Mashiur Rahman Sajib” । লেখাটি খুব ছোট । আমরা চাই লেখাটি আর একটু বড় দেখাক তাহলে android:text=”Mashiur Rahman Sajib” এর পর এন্টার প্রেস করে লিখে দিন
android:textSize =”23sp”  । আপনি যখন xml ফাইলে কোন কিছু লিখতে যাবেন তখন বারবার android:এই-সেই লেখার দরকার নেই । ধরুন আপনি textSize ট্যাগটি লিখবেন তাহলে শুধু t লিখলেই দেখবেন Android Studio আপনাকে সাজেশন দিবে  t তে কোন কোন ট্যাগ আছে । সেখান থেকে textSize ট্যাগে ক্লিক করলেই চলে আসবে ।

তো আমাদের প্রথম কোড করা শেষ , এখন চলুন আমাদের এই এপ্লিকেশন মোবাইলে চালিয়ে দেখা যাক । এই এপ্লিকেশন গুলো মোবাইলে কিভাবে চলে তা দেখার জন্য Android Emulator নামে একটি ভার্চুয়াল মোবাইল আছে, আপনি চাইলে আপনার এই এপ্লিকেশন রিয়েল মোবাইলেও চালাতে পারেন । কিভাবে রিয়েল মোবাইলে আপনার এপ্লিকেশন চালাবেন তা দেখতে ক্লিক করুন –

এখন আমরা যদি ভার্চুয়াল মোবাইলের মাধ্যমে এপ্লিকেশন চালাতে চাই তাহলে একদম উপরে ৫ নম্বর বক্সের রান বাটনে ক্লিক করুন । বাই ডিফল্ট এখানে কোন ডিভাইস থাকলে সেটিতে ক্লিক করে OK বাটনে প্রেস করুন ।  আর যদি কোন ভার্চুয়াল ডিভাইস তৈরি করা নাহ থাকে তবে চলুন আমরা আমাদের ইচ্ছামত একটি ভার্চুয়াল ডিভাইস তৈরি করে নেই ।

এর জন্য প্রথমে Create New Virtual Device বাটনে ক্লিক করুন –

এখানে আপনি বিভিন্ন সাইজ ও রেজুলেশনের ফোন দেখতে পাচ্ছেন । এর ভিতর যে কোন একটি সিলেক্ট করুন ।

আপনি যদি চান যে আপনার মোবাইল এর সাইজ এর চেয়েও বড় হবে কিংবা কোন কিছুর সাথেই মিল হচ্ছে নাহ তবে New Hardware Profile এ ক্লিক করুন –

এখানে আপনি আপনার Device Name– চাইলে আপনি আপনার নামও বসিয়ে দিতে পারেন,
   Device Type –  মোবাইলের সাইজ কত হবে,
 Screen – রেজুলেশন কেমন হবে ,
 Memory – আমরা কমপক্ষে ২ জিবি অর্থাৎ ২০৪৮ এমবি জায়গা দিয়ে দিব,                                            Input – প্রায় বেশীর ভাগ স্মার্টফোনেই ৩টি বাটন(back,home,menu) থাকে আপনি ভার্চুয়াল মোবাইলেও সেরকম চাইলে Has Hardware Buttons এ টিক দিয়ে রাখুন আবার আলাদা A-Z 0-9 কি-বোর্ড থাকে,এজন্য Has Hardware Keyboard টিক দিয়ে রাখুন ।
   Supported device states –  মোবাইলটা ২দিকেই ঘুরাতে চাই কিনা
 Cameras – ফ্রন্ট ব্যাক ২ ক্যামেরাই চাই কিনা
 Sensors – মোবাইলের সাথে থাকা সেন্সর গুলো ইউজ করতে চাই কিনা
 Default Skin –

এগুলো সেট করে Finish বাটনে ক্লিক করুন । তাহলে দেখবেন এখন অনেকগুলো মোবাইলের যে লিস্ট ছিল সেখানে আপনার তৈরি ওই মোবাইলের নামও চলে এসেছে । এরপর সেটি সিলেক্ট করে Next বাটনে ক্লিক করুন ।

এখন আপনি আপনার মোবাইলে কোন অপারেটিং সিস্টেম চালাতে চান সেটি ডাউনলোড করে নিন । বাই ডিফল্ট যদি কোন অপারেটিং সিস্টেম ডাউনলোড করা থাকে তবে দেখবেন তার পাশে  Download শব্দটি লেখা নেই । সেটি পছন্দ নাহ হলে এবং আপনাকে যে Recommended অপারেটিং সিস্টেম গুলো বলা হয়েছে সেগুলো একটিও যদি পছন্দ নাহ হয় তবে  x86 Images থেকে কোন অপারেটিং সিস্টেম ডাউনলোড করে নিন ।

তাহলে দেখা যাক আমরা অপারেটিং সিস্টেম কিভাবে ডাউনলোড করবো । প্রথমে ডাউনলোড বাটনে ক্লিক করুন -> এরপর আপনাকে ওদের লাইসেন্স Accept করার কথা বলবে,

সেখানে ক্লিক করে Next বাটনে ক্লিক করুন । ডাউনলোড হয়ে আপনা-আপনি সেটি ইন্সটল হয়ে যাবে, একটু সময় লাগবে , অপেক্ষা করুন ।

এরপর আপনার পছন্দের অপারেটিং সিস্টেম সিলেক্ট করে Next বাটনে ক্লিক করুন –

এখানে আপনি চাইলে আবার আপনার সিস্টেম চেঞ্জ করতে পারবেন । এখানে ,
Startup orientation – এখানে Portrait ও Landscape ২ টি অপশন আছে , যখন মোবাইল ওপেন হবে তখন সেটি সোজা নাকি বাঁকানো অবস্থায় ওপেন হবে ।
Show Advance Settings – এ গেলে আরো কিছু অপশন পাবেন , যেমন –

Camera – ভার্চুয়ালি মোবাইল দিয়ে যখন আপনি পিক তুলতে যাবেন তখন একটি ব্লাক ব্যাকগ্রাউন্ড ওপেন হয় । এখন যদি ফ্রন্ট ও ব্যাক ক্যামেরায় যদি চান ল্যাপটপ এর ওয়েবক্যাম দিয়ে পিক তুলতে তবে webcam() অপশন সিলেক্ট করে নিন ।
Network – মোবাইলের নেটওয়ার্ক কেমন হবে সেটি
Device Frame – মোবাইলটা দেখতে রিয়েল মোবাইলের মত দেখাবে কিনা নাকি শুধু স্ক্রিন

 এরপর  Finish বাটনে ক্লিক করুন ।

এখন দেখুন আপনি আপনার এপ্লিকেশন রান করার সময় যে ভার্চুয়াল ডিভাইস দেখতে পাচ্ছেন সেটি সিলেক্ট করে   ok বাটনে ক্লিক করুন ।

একটু অপেক্ষা করুন । এখন নিশ্চয়ই আপনার নাম দেখতে পাচ্ছেন 🙂

আপনি যেহেতু একদম নতুন তাই এই পর্বটি শুধু একবার চোখ বুলিয়ে যান 😊

আপনি ভার্চুয়াল মোবাইল দিয়ে ফোনকল বাদে সবকিছু করতে পারবেন । এটি রিয়েল মোবাইলের মতই । যদি ফোনকলের ফ্রি সফটওয়্যার নামিয়ে নেন তবে ফোনকলও দিতে পারবেন । তাই কাউকে মেইল পাঠানো কিংবা কোন স্পর্শকাতর বিষয়ে অবশ্যই দৃষ্টি রাখবেন ।

প্রথমেই আমরা একটি অ্যাপের ডিজাইন করা শেখবো । তো আপনার প্রোজেক্ট এর activity_main.xml এ চলে আসুন ।

Tag
প্রথমেই ট্যাগ নামক শব্দটির সাথে চলুন পরিচিত হওয়া যাক । HTML এর মত XML এও আমরা ট্যাগ ব্যাবহার করে থাকি , একটি ট্যাগ দেখতে ঠিক এরকম < tag_name > </ tag_name > কিংবা < tag_name />

< tag_name এখানে যে লেখাগুলো দেখেবন সেগুলো হল এই ট্যাগের বৈশিষ্ট অর্থাৎ এই উপাদানটি দেখতে কিংবা আচারনে কিরকম হবে  > আর এখানে যে লেখাগুলো লেখা হয় সেগুলো এই ট্যাগের বাচ্চা-কাচ্চা অর্থাৎ এই ট্যাগের আন্ডারে অন্য কোন উপাদান </ tag_name >

XML
আমরা যে ল্যাঙ্গুয়েজ দ্বারা অ্যাপের  ডিজাইন করি সেটি হল Xml । xmlফাইলে গেলে কিছু টেক্স অটোমেটিক দেয়া আছে দেখতে পাবেন , এগুলো আপাতত বুঝার মত কিছু নাহ , শুধু জেনে রাখা ভালো । তাই একবার চোখ বুলিয়ে রাখুন 😊

<?xml version="1.0" encoding="utf-8"?>

একদম উপরে দেয়া এই লাইনটি দ্বারা বুঝায় আমরা যে Xml দিয়ে লিখবো সেটি হল Xml এর 1.0 ভার্সন । এবং এই Xml যখন বাইটকোডে রূপান্তরিত হবে তখন utf-8 এর ফন্ট দ্বারা রূপান্তরিত হবে ।

এরপর যে <android.support.constraint.ConstraintLayout   

দেখাচ্ছে এটা হল আমাদের অ্যাপের রুট লেআউট ফাইল, ইচ্ছা হলে অন্যান্য আরো লেআউট ফাইল নিয়ে আমরা কাজ করতে পারবো, এই লেআউট এর ভিতরেই আমরা আরো অনেক লেআউট ব্যাবহার করতে পারবো ।

xmlns:android="http://schemas.android.com/apk/res/android"

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

xmlns:tools="http://schemas.android.com/tools"

এর মানে আমরা যে অ্যাপটা বিল্ড করতেছি তা অ্যান্ড্রোয়েড স্টূডিও এর টুলস ব্যাবহার করার মাধ্যমে ।

এরপর নিচে যা লেখা আছে এইগুলোও একবার চোখ বুলিয়ে যান । পরে নিজেই বুঝতে পারবেন । আপনি অ্যান্ড্রোয়েড স্টূডিও তে বিগেনার হয়ে থাকলে শুরুতেই মাথা ঘামানোর প্রয়োজন নেই 😊

                                                 Object
TextView , EditText , Button , ImageView সহ সকল ধরনের ভিউ নিয়ে যখন আমরা কাজ করবো তখন সেই সব ভিউ এর অব্জেক্ট তৈরি করে নিতে হবে এক্টিভিটি ক্লাসে । অ্যান্ড্রোয়েড লাইব্রেরী তে এইসকল ভিউ এর আচরন কি রকম হবে , কোন ম্যাথড কি রকম কাজ করবে তার সকল কিছু TextView , EditTex  ক্লাসে তৈরি করা আছে । xml ফাইলে আমরা প্রতিটি ভিউ এর জন্য আইডি দিয়ে দিব । এরপর এক্টিভিটি ক্লাসে অব্জেক্ট তৈরি করে সেই অব্জেক্ট এর সাথে ভিউ এর আইডি যোগ করে দিব । এর ফলে আমরা এক্টিভিটি ক্লাসের অব্জেক্ট নিয়ে যা করবো তার প্রতিফলন ওইসব ভিউ তে ঘটবে ।

আপাতত জেনে রাখুন  । পরে অনেক বার প্রয়োজন পড়বে । তখন আবার দেখে নিবেন 😊

introduction about android studio CLASS(3)

চলুন Android Studio এর সাথে হালকা পরিচিত হয়ে নেয়া যাক –

1 –  এ রকম ফাইলগুলো হল Activity Class । একটি অ্যাপে অসংখ্য  Activity Class থাকে । Activity হল ধরুন পত্রিকা হল একটি অ্যাপ । তাহলে পত্রিকার প্রতিটি পাতা হল এক একটি Activity । প্রোগ্রামিং কোডগুলো আমরা Activity Class এ লিখে থাকি ।

2 – এখানে অ্যাপের ডিজাইন করা হয় । এগুলোকে বলে layout ফাইল । ডিজাইন করা হয় xml এর সাহায্যে । ডিজাইন  ২ ভাবে করা যায় – ৩ ও ৪ নম্বরে দেখি

3 – প্রতিটি ট্যাগ হাতে লেখার মাধ্যমে ডিজাইন করা যায় । মাঝখানে যে লেখাগুলো দেখতে পাচ্ছেন এগুলই xml লেখা এবং এভাবেই হাতে হাতে লিখবো

4 –  ড্রাগ-ড্রপ এর মাধ্যমে ডিজাইন করা যায় । ডিজাইন এ ক্লিক করলেই দেখতে পাবেন Palette এ অসংখ্য ভিউ আছে Like –  TextView , Button , CheckBox । এগুলোর উপর ক্লিক করে টেনে মোবাইলের স্ক্রিনের ভিতর নিয়ে আসলেই সেটা সেখানে সেট হয়ে যাবে । তবে এরকম ভাবে ডিজাইন করতে গেলে অনেক অসুবিধা আছে । তাই আমরা হাতে লিখেই ডিজাইন করবো

5 –  ডিজাইন করার সময় সাথে সাথে যদি দেখতে চান মোবাইলে কিভাবে পরিবর্তন হচ্ছে তবে Preview তে ক্লিক করুন

6 – এর পাশে যে সবুজ রঙের বাটনটি দেখতে পাচ্ছেন । এটির মাধ্যমে অ্যাপ রান করা হয় । আমাদের অ্যাপ মোবাইলে কিভাবে আচরন করে তা দেখবো এটি তে ক্লিক করার মাধ্যমে

7 – AVD Manager ( Android Virtual Device Manager ) । অ্যাপ ২ ভাবে রান করে দেখা যায় । রিয়েল মোবাইল অর্থাৎ আপনার কাছে থাকা স্মার্টফোনের সাহায্যে আবার এটির মাধ্যমে ভার্চুয়ালি একটি স্মার্টফোন তৈরি করার মাধ্যমে । আপনি আপনার তৈরি এই ভার্চুয়ালি মোবাইল আপনার ইচ্ছামত সকল সেটিংস চেঞ্জ করতে পারবেন যখন খুশী তখন । মনে রাখবেন এই ভার্চুয়াল মোবাইল রিয়েল ডিভাইস এর মতই । শুধু এখানে ব্যালেন্স নেই বলে আপনি ফোন দিতে পারবেন নাহ । এছাড়া রিয়েল ডিভাইস দিয়ে আপনি যা করেন তার সবকিছুই করা যাবে ।

8 – Android Studio এর সকল সেটিংস ও যে সকল লাইব্রেরী দরকার তা এখানে পাওয়া যাবে

9 – আমাদের অ্যাপে যত রকমের ফাইল আছে তার লিস্ট দেখা যাবে এখানে

10 – প্রতিটি ফাইলের ভিতর কি কি আছে তা দেখতে ফাইলটি ওপেন করে এই Structure এ ক্লিক করুন

৯ নং এর পাশেই দেখুন Android লেখা একটি বাটন আছে । ওখানে Android নাহ থেকে অন্য কিছু থাকলে বাটনের উপর ক্লিক করে Android লেখা চাপুন । ফলে আপনি  app ও Gradle Scripts দেখতে পাবেন
app এ ক্লিক করলে দেখতে পাবেন ৩টি ফোল্ডার – manifests , java এবং res

11 – manifests এর ভিতরে থাকে ১টি xml ফাইল যার নাম – AndroidManifest.xml  । এখানে অ্যাপের প্রধান সকল গুনগুলো দেয়া থাকে । অ্যাপের নাম, আইকন,  থিম, কি কি Activity Class আছে এসব সহ আরো কিছু, নিজেই দেখে নিন

12 – java এর ভিতরেও ৩টি ফোল্ডার পাবেন । আপাতত আমরা শুধু ১ম ফোল্ডার টি নিয়ে কাজ করবো । ১৪ নম্বর যে দেয়া আছে সেটি নিয়ে ।  এখানে সকল Activity Class  এর লিস্ট থাকে

13 – res এর ভিতর সকল রিসোর্স উপাদানগুলো থাকে থাকে । এর ভিতরে ১৫,১৬,১৭,১৮ ফাইলগুলো থাকে

15 – ধরুন আমরা একটা বাটন ডিজাইন করে সেটি অনেক জায়গায় ব্যাবহার করতে চাই । তাহলে সেই ডিজাইন এই ফাইলের ভিতরে রেখে আমরা ওইসব জায়গায় ফাইলটি কল করলেই হবে । এছাড়া  ভিডিও,অডিও রাখা হয় এই ফোল্ডার এর ভিতর । ইমেজও রাখা যায় তবে ইমেজ রাখতে ১৭ নম্বর ফাইলটি ব্যাবহার করা ভালো

16 – অ্যাপের ভিতর সকল লেআউট ফাইলের লিস্ট এখানে থাকে । Activity Class ছাড়াই শুধুমাত্র লেআউট ফাইল খুলতে চাইলে layout এর উপর রাইট ক্লিক করে খুলতে হবে ।

17 – এখানে অ্যাপে ব্যাবহার করা সকল ইমেজ ফাইল রাখা হয় , ইমেজের নামের ভিতর স্পেস কিংবা প্রথমে সংখ্যা রাখবেন নাহ

18 – values এর ভিতরে ৩ টি ফাইল থাকে । colors.xml , strings.xml , styles.xml  । colors.xml এর ভিতর আমরা সকল রঙ এর কোড ও নাম লিখে দিয়ে , সেই নামগুলো xml এর ভিতর ব্যাবহার করবো । কোডের ভিতর কিংবা লেআউট ফাইলের ভিতর আমরা যত  string ব্যাবহার করবো সেসব strings.xml এ  লিখে দিব । ডায়রেক্টও লেখা যায় তবে সেটা ভালো প্র্যাকটিস নয় । styles.xml এর ভিতর আমরা একটা ভিউ এর স্টাইল লিখে রেখে সেই স্টাইল ভিউকে কল করে থাকি । আমরা সাধারণত xml ফাইলেই  ডিজাইন করে থাকি , তো কিছু কমন ডিজাইন থাকে যা বার বার লিখতে হয় । এই সমস্যা থেকে রেহাই পেতে, ওই সব ডিজাইন এখানে লিখে দেয়া হয় । প্র্যাকটিস করলেই আস্তে আস্তে সবগুলো বুঝে যাবেন

19 – এটি প্রোজেক্ট গ্রেডেল ফাইল । প্রোজেক্ট এর ভিতর অনেক সময় অনেক লাইব্রেরী এড করতে হয় , সেগুলো এখানে এড করে নিব , এখানে তেমন একটা কাজ নেই বললেই চলে

20 – এটি অ্যাপ লেভেল গ্রেডেল ফাইল । অ্যাপের সকল প্রয়োজনীয় লাইব্রেরী সহ অ্যাপের ভার্সন ও মিনিমাম কোন মোবাইলে অপারেটিং সিস্টেম এই অ্যাপটি চালাতে পারবে, অ্যাপের টার্গেট  মোবাইল অপারেটিং সিস্টেম কোনটা এগুলো লিখে দেয়া হয় । এখানে এটা-অটা নিয়ে প্রায়ই আমাদের কাজ করতে হবে

21 – কম্পিউটারের কোথায় অ্যাপের ফাইলটি আছে তার লোকেশন এটি

এছাড়াও আরো বহুত কিছু আছে যা আস্তে আস্তে আমরা প্রয়োজনের সময় দেখে নিব , তো মোটামুটি Android Studio সম্পর্কে একটা হালকা ধারনা হয়ে গেছে আশা করি

CREATE ANDROID PROJECT CLASS (2)

প্রথমে দেখে নেয়া যাক কিভাবে আমরা একটি নতুন প্রোজেক্ট খুলতে পারি । এবার যদি আপনি Android Studio সফটওয়্যারটি রান করেন তাহলে এমন উইন্ডো দেখা যাবে –

এখান থেকে Start a new Android Studio project এ ক্লিক করুন । নতুন আর একটি উইন্ডো চলে আসলো । এবার দেখে নেয়া যাক এখানে কি কি আছে –

Application name  – আপনি আপনার অ্যাপের যে নাম দিবেন তা এখানে লিখতে হবে । প্রথম অক্ষর অবশ্যই বড় হাতের হতে হবে । আর একটা ব্যাপার হল অ্যাপের নামের ভিতর স্পেস নাহ রাখাই বেটার । আপনি চাইলে পরবর্তীতে এই নাম পাল্টিয়েও দিতে পারবেন ।

Company domain  – এরপর কোম্পানি ডোমেইন নামে একটি বিষয় দেখা যাচ্ছে । তো আমরা যখন প্রোফেশনাল ওয়েবসাইট তৈরি করবো তখন অনলাইনে এর মালিকানা বিষয়ে পরিচয় রাখার জন্য সাধারণত ডোমেইন নামটি ব্যাবহার করা হয় । যদি কোন ডোমেইন নাহ থাকে তবে ওটা ওরকমই রেখে দিন । আগে কাজ তো শেখা যাক 😊.

Project location  – আমাদের কম্পিউটার এর কোন ফাইলের ভিতর আমাদের প্রোজেক্ট টি রাখবো তার লোকেশন দিয়ে দিব ।

-> এরপর আমাদের প্রোজেক্ট এ সি++  এবং কটলিন ল্যাংগুয়েজ সাপোর্ট করাবো কিনা তার চেকবক্স দেখতে পাচ্ছি । আমরা যদি সি++ কিংবা কটলিন ল্যাংগুয়েজ দিয়ে আমাদের কোড লিখতে চাই তবে এগুলো টিক দিয়ে দিব।

এরপর Next বাটনে ক্লিক করা যাক –

–> আমরা আমাদের এপ্লিকেশন কোন প্লাটফর্মে ব্যবহার করবো এখানে তা নির্ধারণ করে দিতে হবে । এখানে দেয়া চেকবক্স গুলোর ভিতর যে কোন একটি সিলেক্ট করে কাজ শুরু করতে হবে। একসাথে সবগুলো নিয়েই শুরু করা যাবে তবে তা হযবরল হয়ে যাবে 😊

 ধরলাম আমরা Phone and Tablet এর জন্য এপ্লিকেশন বানাবো । এখন Minimum SDK  থেকে আমাদের এপ্লিকেশন অ্যায়ন্ড্রোয়েড এর সর্বনিম্ন কোন ভার্সন পর্যন্ত সাপোর্ট করার অনুমতি দিব তা নির্ধারণ করে দিব।  এখানে Help me choose ক্লিক করলেই কোন ভার্সন পৃথিবীর কত ভাগ মোবাইলে ব্যাবহার হচ্ছে তার শতকরা হিসাব দেখতে পাবেন এবং কোন ভার্সনে Android এ কি কি ফিচার যুক্ত হয়েছে তার বর্ণনাও দেয়া আছে । আর একটি কথা আমরা নিশ্চয়ই জানি প্রতিটা ভার্সনের জন্য একটি এপিআই নাম্বার থাকে , যত ভার্সন  অ্যানন্ড্রোয়েট আপডেট করে এপিআই নাম্বার তত বাড়তে থাকে । ধ্রুন আপনি মিনিমাম এপিআই লেভেল ১৭ সিলেক্ট করলেন তাহলে আপনার তৈরি এপ্লিকেশন এপিআই লেভেল ১৮-১৯-২০ এও সাপোর্ট করবে কিন্তু  এপিআই লেভেল ১৬ তে আপনার এপ্লিকেশন সাপোর্ট করবে নাহ। তাহলে আপনি  নিশ্চয়ই চাইবেন একদম সর্বনিম্ন এপিআই লেভেল দিয়ে রাখতে কিন্তু  সেখানে আবার সমস্যা হল আপগ্রেড ভার্সন গুলোর অনেক ফিচার এর কোড লেখার সময় সাপোর্ট লাইব্রেরী যুক্ত করা সহ অনেক ঝামেলায় পড়তে হয় । তাই আপনি আপনার এপ্লিকেশন এ কিরকম ফিচার ব্যাবহার করবেন এবং আপনার টার্গেট ইউজার কারা সেই মাফিক এপিআই লেভেল সিলেক্ট করবেন । তবে চিন্তার কোন কারন নেই চাইলে পরে আবার এটি যতবার খুশি চেঞ্জ করতে পারবেন । ধরলাম আমরা এপিআই লেভেল ১৭ সিলেক্ট করলাম ।

Phone and Tablet এর নিচেই আর একটি চেকবক্স দেখতে পাচ্ছেন Include Android Instant App support নামে । আপনি যদি চান আপনার তৈরি এপ্লিকেশন টি ইউজার ইন্সটল করা ছাড়াই ইউজ করে দেখতে পারবে তাহলে এই চেকবক্স এ টিক দিয়ে দিন । ইউজার সাধারণত অ্যাপ ইন্সটল করতে চায় নাহ । আপনি একটি নতুন অ্যাপ বানিয়ে যতই ইউজার টানার চেষ্টা করেন নাহ কেন ইউজার সর্বদা আলসেমী করবেই । আবার ইউজার এর মোবাইলে অনেক অ্যাপ ইন্সটল আছে ভেবেও নতুন করে কোন অ্যাপ ইন্সটল করতে চায় নাহ । তাই ইউজার কে ইন্সটল ছাড়াই অ্যাপ ইউজ করার সুবিধা দেয়া উচিত । ইউজার এর অ্যাপটি ভালো লাগলে তখন তার ফোনের র‍্যাম ফুল থাকলেও সে আপনার অ্যাপ ইউজ করার জন্য অন্য অ্যাপ আনইন্সটল করতে দ্বিধাবোধ করবে নাহ , আর এই সুবিধা দিতে চাইলে সর্বনিম্ন এপিআই লেভেল ২৩ এ রাখতে হবে । তবে সেখত্রে কোডের ভিতরে কিছু এক্সটা কোড লিখে দিতে হবে এবং কোন URL এ তে অ্যাপ টি ভিজিট করা যাবে তা দিতে হবে । তাই আমরা আপাতত এই ঝামেলায় গেলাম নাহ । এগুলো পরেও দেখা যাবে 😊

এরপর Next বাটনে ক্লিক করা যাক –

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

এখন আমাদের এক্টিভিটি কিরকম হবে তার কিছু চিত্র নির্দেশনা এখানে দেয়া আছে । আমরা যেহেতু নতুন শিখতে শুরু করছি তাই আমরা  Empty Activity সিলেক্ট করে
Next বাটনে ক্লিক করি –

CREATE ANDROID PROJECT 4.png

আমাদের এপ্লিকেশন এ অন্তত একটি এক্টিভিটি থাকতে হবে । প্রতিটি এক্টিভিটি ২টি জিনিস নিয়ে গঠিত । ১টি হল Activity Name (যেখানে জাভা কিংবা কটলিন কিংবা সি++ ল্যাংগুয়েজ দ্বারা আমাদের এপ্লিকেশন এর কোডগুলো লিখে দিব) এবং অন্যটি হল Layout Name (এটি আমরা উইন্ডোতে যা কিছু দেখতে পাবো সেই ভিউ কম্পোনেন্ট গুলো ) । অর্থাৎ আমরা আমাদের চোখে যা কিছু দেখবো তা লেআউট ফাইলে ডিজাইন করা হয় এবং এর ভিতরের কাজগুলো Activity Name নামক ক্লাসের ভিতর লিখে দেয়া হয় । এখানে লেআউট ফাইলের নামের সবগুলো অক্ষরই ছোট হাতের হতে হবে ।
প্রতিটি Activity Name  ক্লাসের জন্য যে একটি করে লেআউট ফাইল থাকতে হবে এমন কোন নিয়ম নাই । একটি Activity Name  ক্লাসের জন্য ২-৩ টি লেআউট ফাইল থাকতে পারে তেমনি আবার একটি লেআউট ফাইল এর ব্যাকগ্রাউন্ডে ২-৩ টি জাভা ক্লাসের কাজও থাকতে পারে । আবার কোন এক্টিভিটি ক্লাসের জন্য কোন লেআউট ফাইলের প্রয়োজন নাও হতে পারে ।

এরপর Finish বাটনে ক্লিক করি । শুধুমাত্র প্রথমবার ফাইল ওপেন হতে ৩০-৪০ মিনিট পর্যন্ত সময়ও নিতে পারে ,একটি ফাইলের জন্য দরকারী অনেক লাইব্রেরী তখন ডাউনলোড করে ফাইলের সাথে এড হয় তো এজন্য । তাই একটু ধৈর্য ধরে অপেক্ষা করুন ।