How to Build Age Calculator in Android Studio? - RSM Developer

Step 1: Creating a new project

  • Open a new project.
  • We will be working on Empty Activity with language as Java. Leave all other options unchanged.
  • You can change the name of the project at your convenience.
  • There will be two default files named activity_main.xml and MainActivity.java.

Step 2: Navigate to Build scripts > build.gradle(module) file and add the following dependency to it

//Age Calculater
implementation 'joda-time:joda-time:2.9.1'

Step 3: Working with the activity_main.xml file

Here we will design the user interface of our application. We will be using the following components for their respective works:

  • Button 1: to pick the first date user wants to enter.
  • Button 2: to pick the second date user wants to enter.
  • Button 3: to perform the calculation
  • TextView: to show the final output(age).

Navigate to the app > res > layout > activity_main.xml and add the below code to that file.

<?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"
android:background="@color/white"
tools:context=".MainActivity">

<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="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp"
tools:context=".MainActivity">

<!-- linear layout to show datepickers-->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- to select the first date-->

<Button
android:id="@+id/bt_birth"
android:layout_width="150dp"
android:layout_height="50dp"
android:backgroundTint="#ff0000"
android:text="01/01/2021"
android:textColor="@color/white"
android:textSize="13sp" />

<!-- displaying message as "to"-->

<TextView
android:layout_width="100dp"
android:layout_height="50dp"
android:gravity="center_horizontal"
android:text="To"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold" />

<!-- to display date number 2-->

<Button
android:id="@+id/bt_today"
android:layout_width="145dp"
android:layout_height="50dp"
android:backgroundTint="#009688"
android:textColor="@color/black"
android:textSize="13sp" />

</LinearLayout>

<!-- to perform the calculation-->

<Button
android:id="@+id/btn_calculate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="calculate" />

<!-- to display the message "Result"-->

<TextView
    android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="Result"
android:textColor="@color/white"
android:textSize="30sp"
android:textStyle="bold" />
        <!-- To show the final output(age)-->

<TextView
    android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#2196F3"
android:text="0 Years | 0 Months | 0 Days"
android:textSize="25sp"
android:textColor="@color/white"
android:textStyle="bold" />

</LinearLayout>

</LinearLayout>

Step 4: Working with MainActivity.java file

In MainActivity.java file onClickListener is used on buttons to pick the date and to perform the calculation. Use the following code in the MainActivity.java file.

package com.rsmdeveloper.agecalculater;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

import android.app.DatePickerDialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;

import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

import org.joda.time.Period;
import org.joda.time.PeriodType;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

// initializing variables

Button btn_birth, btn_today, btn_calculate;

TextView tvResult;

DatePickerDialog.OnDateSetListener dateSetListener1, dateSetListener2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// assign variables

btn_birth = findViewById(R.id.bt_birth);
btn_today = findViewById(R.id.bt_today);
btn_calculate = findViewById(R.id.btn_calculate);
tvResult = findViewById(R.id.tv_result);

// calendar format is imported to pick date
Calendar calendar = Calendar.getInstance();

// for year
int year = calendar.get(Calendar.YEAR);

// for month
int month = calendar.get(Calendar.MONTH);

// for date
int day = calendar.get(Calendar.DAY_OF_MONTH);

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");

// to set the current date as by default
String date = simpleDateFormat.format(Calendar.getInstance().getTime());
btn_today.setText(date);

// action to be performed when button 1 is clicked
btn_birth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// date picker dialog is used
// and its style and color are also passed
DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, android.R.style.Theme_Holo_Light_Dialog_MinWidth, dateSetListener1, year, month, day

);

// to set background for datepicker
datePickerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
datePickerDialog.show();
}

});

// it is used to set the date which user selects
dateSetListener1 = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
// here month+1 is used so that
// actual month number can be displayed
// otherwise it starts from 0 and it shows
// 1 number less for every month
// example- for january month=0
month = month + 1;
String date = day + "/" + month + "/" + year;
btn_birth.setText(date);
}

};

// action to be performed when button 2 is clicked
btn_today.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// date picker dialog is used
// and its style and color are also passed
DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this, android.R.style.Theme_Holo_Light_Dialog_MinWidth, dateSetListener2, year, month, day);
// to set background for datepicker
datePickerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
datePickerDialog.show();
}
});

// it is used to set the date which user selects
dateSetListener2 = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
// here month+1 is used so that
// actual month number can be displayed
// otherwise it starts from 0 and it shows
// 1 number less for every month
// example- for january month=0
month = month + 1;
String date = day + "/" + month + "/" + year;
btn_today.setText(date);
}
};

// action to be performed when calculate button is clicked
btn_calculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// converting the inputted date to string
String sDate = btn_birth.getText().toString();
String eDate = btn_today.getText().toString();
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("dd/MM/yyyy");
try {
// converting it to date format
Date date1 = simpleDateFormat1.parse(sDate);
Date date2 = simpleDateFormat1.parse(eDate);
long startdate = date1.getTime();
long endDate = date2.getTime();

// condition
if (startdate <= endDate) {
org.joda.time.Period period = new Period(startdate, endDate, PeriodType.yearMonthDay());
int years = period.getYears();
int months = period.getMonths();
int days = period.getDays();

// show the final output
tvResult.setText(years + " Years |" + months + "Months |" + days + "Days");
} else {
// show message
Toast.makeText(MainActivity.this, "BirthDate should not be larger than today's date!", Toast.LENGTH_SHORT).show();
}
} catch (ParseException e) {
e.printStackTrace();
}
}
});

}
}


Output:
Now run the App and you will see main topics and sub-topics listed.....



Post a Comment

Previous Post Next Post

যোগাযোগ ফর্ম