Practical 1 – Android Activity Lifecycle
Java Code (MainActivity.java)
package com.example.lifecycle;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(getApplicationContext(),"inside onCreate", Toast.LENGTH_LONG ).show();
}
@Override
protected void onStart() {
super.onStart();
Toast.makeText(getApplicationContext(),"inside onStart", Toast.LENGTH_LONG).show();
}
@Override
protected void onResume() {
super.onResume();
Toast.makeText(getApplicationContext(),"inside onResume", Toast.LENGTH_LONG ).show();
}
@Override
protected void onPause() {
super.onPause();
Toast.makeText(getApplicationContext(),"inside onPause", Toast.LENGTH_LONG ).show();
}
@Override
protected void onStop() {
super.onStop();
Toast.makeText(getApplicationContext(),"inside onStop", Toast.LENGTH_LONG ).show();
}
@Override
protected void onRestart() {
super.onRestart();
Toast.makeText(getApplicationContext(),"inside onRestart", Toast.LENGTH_LONG ).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
Toast.makeText(getApplicationContext(),"inside onDestroy", Toast.LENGTH_LONG ).show();
}
}
Practical 2 – Addition of Two Numbers
XML Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter first number"
android:inputType="number" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter second number"
android:inputType="number" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Numbers" />
<TextView
android:id="@+id/txtResult1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp" />
</androidx.constraintlayout.widget.ConstraintLayout>
Java Code (MainActivity.java)
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText1 = findViewById(R.id.editText1);
EditText editText2 = findViewById(R.id.editText2);
Button submitButton = findViewById(R.id.button);
TextView txtResult = findViewById(R.id.txtResult1);
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num1 = Integer.parseInt(editText1.getText().toString());
int num2 = Integer.parseInt(editText2.getText().toString());
int res = num1 + num2;
txtResult.setText("The result is: " + res);
}
});
}
}
Practical 3 – Simple Calculator
XML Layout (activity_main.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:background="#F4F4F4">
<TextView
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0"
android:gravity="end"
android:textSize="36sp"
android:padding="16dp"
android:background="#FFFFFF" />
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="4"
android:rowCount="5">
<!-- Buttons omitted here for brevity -->
</GridLayout>
</LinearLayout>
Java Code (MainActivity.java)
package com.example.calculator;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
import java.util.Stack;
public class MainActivity extends AppCompatActivity {
TextView input;
String expression = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input = findViewById(R.id.input);
int[] buttonIds = {
R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4,
R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9,
R.id.btnPlus, R.id.btnMinus, R.id.btnMultiply, R.id.btnDivide,
R.id.btnDot, R.id.btnOpen, R.id.btnClose
};
View.OnClickListener listener = v -> {
Button b = (Button) v;
expression += b.getText().toString();
input.setText(expression);
};
for (int id : buttonIds) {
Button btn = findViewById(id);
btn.setOnClickListener(listener);
}
Button clear = findViewById(R.id.btnC);
clear.setOnClickListener(v -> {
expression = "";
input.setText("0");
});
Button equal = findViewById(R.id.btnEqual);
equal.setOnClickListener(v -> {
try {
double result = evaluate(expression);
input.setText(String.valueOf(result));
expression = String.valueOf(result);
} catch (Exception e) {
input.setText("Error");
expression = "";
}
});
}
private double evaluate(String expr) {
return new Object() {
int pos = -1, ch;
void nextChar() { ch = (++pos < expr.length()) ? expr.charAt(pos) : -1; }
boolean eat(int charToEat) {
while (ch == ' ') nextChar();
if (ch == charToEat) { nextChar(); return true; }
return false;
}
double parse() {
nextChar();
double x = parseExpression();
if (pos < expr.length()) throw new RuntimeException("Unexpected: " + (char)ch);
return x;
}
double parseExpression() {
double x = parseTerm();
while(true) {
if (eat('+')) x += parseTerm();
else if (eat('-')) x -= parseTerm();
else return x;
}
}
double parseTerm() {
double x = parseFactor();
while(true) {
if (eat('*')) x *= parseFactor();
else if (eat('/')) x /= parseFactor();
else return x;
}
}
double parseFactor() {
if (eat('+')) return parseFactor();
if (eat('-')) return -parseFactor();
double x;
int startPos = this.pos;
if (eat('(')) {
x = parseExpression();
eat(')');
} else if ((ch >= '0' && ch <= '9') || ch == '.') {
while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
x = Double.parseDouble(expr.substring(startPos, this.pos));
} else {
throw new RuntimeException("Unexpected: " + (char)ch);
}
return x;
}
}.parse();
}
}
Practical 4 – BMI Calculator
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/editText1"
android:hint="Enter weight (kg)"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/editText2"
android:hint="Enter height (m)"
android:inputType="numberDecimal" />
<Button
android:id="@+id/button"
android:text="Calculate BMI" />
<TextView
android:id="@+id/txtResult1"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
Java Code (MainActivity.java)
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText1 = findViewById(R.id.editText1);
EditText editText2 = findViewById(R.id.editText2);
Button submitButton = findViewById(R.id.button);
TextView txtResult = findViewById(R.id.txtResult1);
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
float weight = Float.parseFloat(editText1.getText().toString());
float height = Float.parseFloat(editText2.getText().toString());
float bmi = weight / (height * height);
String category;
if (bmi < 18.5) category = "Underweight 😢";
else if (bmi < 25) category = "Normal 😎";
else if (bmi < 30) category = "Overweight 😨";
else category = "Obese 💀";
txtResult.setText("Your BMI is: " + bmi);
Toast.makeText(MainActivity.this, "You fall under " + category, Toast.LENGTH_SHORT).show();
}
});
}
}
Practical 5 — Currency Converter App using Spinner
XML Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<EditText
android:id="@+id/edtNum1"
android:layout_width="271dp"
android:layout_height="62dp"
android:hint="Enter amount"
android:inputType="number" />
<Spinner
android:id="@+id/fromspin"
android:layout_width="269dp"
android:layout_height="65dp" />
<Spinner
android:id="@+id/tospin"
android:layout_width="270dp"
android:layout_height="63dp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Convert" />
<TextView
android:id="@+id/resultView"
android:layout_width="348dp"
android:layout_height="52dp"
android:text="Result will appear here" />
<Button
android:id="@+id/swapbutton"
android:layout_width="64dp"
android:layout_height="72dp"
android:foreground="@drawable/swap" />
<TextView
android:id="@+id/CurrencyConverter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Currency Converter"
android:textSize="34sp"
android:textStyle="bold|italic"
android:gravity="center" />
</androidx.constraintlayout.widget.ConstraintLayout>
Java Code (MainActivity.java)
package com.example.myapplication;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private EditText amountEditText;
private TextView resultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.button);
Button swapbtn = findViewById(R.id.swapbutton);
amountEditText = findViewById(R.id.edtNum1);
resultTextView = findViewById(R.id.resultView);
ArrayList<String> currencies = new ArrayList<>();
currencies.add("USD");
currencies.add("INR");
currencies.add("JPY");
Spinner fromSpinner = findViewById(R.id.fromspin);
Spinner toSpinner = findViewById(R.id.tospin);
ArrayAdapter<String> currencyAdapter = new ArrayAdapter<>(
getApplicationContext(),
android.R.layout.simple_spinner_item,
currencies
);
fromSpinner.setAdapter(currencyAdapter);
toSpinner.setAdapter(currencyAdapter);
btn.setOnClickListener(v -> convertCurrency());
swapbtn.setOnClickListener(v -> swap());
}
void convertCurrency() {
String amountStr = amountEditText.getText().toString();
double amount = Double.parseDouble(amountStr);
Spinner fromSpinner = findViewById(R.id.fromspin);
Spinner toSpinner = findViewById(R.id.tospin);
String fromCurrency = fromSpinner.getSelectedItem().toString();
String toCurrency = toSpinner.getSelectedItem().toString();
double result = convert(amount, fromCurrency, toCurrency);
resultTextView.setText("The result is: " + result);
}
double convert(double amount, String fromCurrency, String toCurrency) {
double rate = 1.0;
if (fromCurrency.equals("USD") && toCurrency.equals("INR")) rate = 82.75;
else if (fromCurrency.equals("USD") && toCurrency.equals("JPY")) rate = 142.50;
else if (fromCurrency.equals("INR") && toCurrency.equals("USD")) rate = 1 / 82.75;
else if (fromCurrency.equals("INR") && toCurrency.equals("JPY")) rate = 1.7225;
else if (fromCurrency.equals("JPY") && toCurrency.equals("USD")) rate = 1 / 142.50;
else if (fromCurrency.equals("JPY") && toCurrency.equals("INR")) rate = 58.125;
return amount * rate;
}
void swap() {
Spinner fromSpinner = findViewById(R.id.fromspin);
Spinner toSpinner = findViewById(R.id.tospin);
int fromPosition = fromSpinner.getSelectedItemPosition();
int toPosition = toSpinner.getSelectedItemPosition();
fromSpinner.setSelection(toPosition);
toSpinner.setSelection(fromPosition);
}
}
XML Layout for Registration (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#FAFAFA"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="24dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imgProfileMain"
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@android:drawable/ic_menu_camera"
android:background="@drawable/circle_bg" />
<TextView
android:id="@+id/tvTitle"
android:text="User Registration"
android:textSize="28sp"
android:textStyle="bold"
android:textColor="#3F51B5" />
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="48dp"
android:hint="Enter your full name"
android:inputType="textPersonName" />
<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="48dp"
android:hint="Enter your email address"
android:inputType="textEmailAddress"
android:layout_marginTop="16dp" />
<RadioGroup
android:id="@+id/rgGender"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<RadioButton
android:id="@+id/rbMale"
android:text="Male" />
<RadioButton
android:id="@+id/rbFemale"
android:text="Female"
android:layout_marginStart="24dp" />
</RadioGroup>
<Spinner
android:id="@+id/spCountry"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="20dp" />
<Button
android:id="@+id/btnDob"
android:layout_width="match_parent"
android:layout_height="48dp"
android:text="Select Date of Birth"
android:layout_marginTop="20dp" />
<TextView
android:id="@+id/tvDob"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp" />
<ProgressBar
android:id="@+id/pbLoading"
android:layout_width="48dp"
android:layout_height="48dp"
android:visibility="gone"
android:layout_marginTop="24dp" />
<Button
android:id="@+id/btnSubmit"
android:layout_width="match_parent"
android:layout_height="48dp"
android:text="Submit"
android:layout_marginTop="24dp" />
</LinearLayout>
</ScrollView>
Next Activity XML (activity_next.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:padding="24dp"
android:background="#FAFAFA"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imgProfileNext"
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@android:drawable/ic_menu_camera" />
<TextView
android:id="@+id/tvResult"
android:textSize="20sp"
android:layout_marginTop="16dp" />
<ProgressBar
android:id="@+id/pbLoadingNext"
android:layout_width="48dp"
android:layout_height="48dp"
android:visibility="gone"
android:layout_marginTop="20dp" />
</LinearLayout>
Java Code — MainActivity.java
package com.example.registration_form;
import androidx.appcompat.app.AppCompatActivity;
import android.app.DatePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
private EditText etName, etEmail;
private RadioGroup rgGender;
private Spinner spCountry;
private Button btnDob, btnSubmit;
private TextView tvDob;
private ProgressBar pbLoading;
private String selectedGender = "";
private String selectedDate = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etName = findViewById(R.id.etName);
etEmail = findViewById(R.id.etEmail);
rgGender = findViewById(R.id.rgGender);
spCountry = findViewById(R.id.spCountry);
btnDob = findViewById(R.id.btnDob);
btnSubmit = findViewById(R.id.btnSubmit);
tvDob = findViewById(R.id.tvDob);
pbLoading = findViewById(R.id.pbLoading);
// Country list
String[] countries = {
"Select Country", "United States", "Canada",
"United Kingdom", "Australia", "India",
"Germany", "France", "Japan"
};
ArrayAdapter<String> adapter = new ArrayAdapter<>(
this, android.R.layout.simple_spinner_item, countries);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spCountry.setAdapter(adapter);
rgGender.setOnCheckedChangeListener((group, checkedId) -> {
RadioButton rb = findViewById(checkedId);
if (rb != null) selectedGender = rb.getText().toString();
});
btnDob.setOnClickListener(v -> {
Calendar calendar = Calendar.getInstance();
DatePickerDialog dpd = new DatePickerDialog(
MainActivity.this,
MainActivity.this,
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)
);
dpd.show();
});
btnSubmit.setOnClickListener(v -> {
pbLoading.setVisibility(View.VISIBLE);
String name = etName.getText().toString().trim();
String email = etEmail.getText().toString().trim();
String country = spCountry.getSelectedItem().toString();
Intent intent = new Intent(MainActivity.this, NextActivity.class);
intent.putExtra("name", name);
intent.putExtra("email", email);
intent.putExtra("gender", selectedGender);
intent.putExtra("country", country);
intent.putExtra("dob", selectedDate);
startActivity(intent);
pbLoading.setVisibility(View.GONE);
});
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
selectedDate = String.format("%d-%02d-%02d", year, month + 1, dayOfMonth);
tvDob.setText("Selected Date: " + selectedDate);
}
}
Java Code — NextActivity.java
package com.example.registration_form;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
public class NextActivity extends AppCompatActivity {
private TextView tvResult;
private ProgressBar pbLoadingNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
tvResult = findViewById(R.id.tvResult);
pbLoadingNext = findViewById(R.id.pbLoadingNext);
pbLoadingNext.setVisibility(View.VISIBLE);
tvResult.setVisibility(View.GONE);
new Handler().postDelayed(() -> {
String name = getIntent().getStringExtra("name");
String email = getIntent().getStringExtra("email");
String gender = getIntent().getStringExtra("gender");
String country = getIntent().getStringExtra("country");
String dob = getIntent().getStringExtra("dob");
String displayText = "User Details\n\n" +
"Name: " + (name.isEmpty() ? "N/A" : name) + "\n" +
"Email: " + (email.isEmpty() ? "N/A" : email) + "\n" +
"Gender: " + (gender.isEmpty() ? "N/A" : gender) + "\n" +
"Country: " + (country.equals("Select Country") ? "N/A" : country) + "\n" +
"Date of Birth: " + (dob.isEmpty() ? "N/A" : dob);
tvResult.setText(displayText);
pbLoadingNext.setVisibility(View.GONE);
tvResult.setVisibility(View.VISIBLE);
}, 1500);
}
}