MAD Guide
MAD Guide
Step-by-Step Setup
• Language: Java
• Empty Activity
1. Drag Plain Text from Palette > Text → Drop it into the layout.
3. In Attributes:
a. id: @+id/num1
c. inputType: numberDecimal
a. id: @+id/num2
c. inputType: numberDecimal
B. Add Two Rows of Buttons
a. Button 1:
i. id: @+id/btnAdd
iii. layout_weight: 1
b. Button 2:
i. id: @+id/btnSub
iii. layout_weight: 1
2. Set:
a. id: @+id/result
c. textSize: 18sp
d. layout_marginTop: 20dp
LinearLayout (vertical)
├── EditText (num1)
├── EditText (num2)
├── LinearLayout (horizontal)
│ ├── Button (btnAdd)
│ └── Button (btnSub)
├── LinearLayout (horizontal)
│ ├── Button (btnMul)
│ └── Button (btnDiv)
└── TextView (result)
3. Java Code (MainActivity.java)
package com.example.arithmeticapp;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
EditText num1, num2;
Button btnAdd, btnSub, btnMul, btnDiv;
TextView result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num1 = findViewById(R.id.num1);
num2 = findViewById(R.id.num2);
btnAdd = findViewById(R.id.btnAdd);
btnSub = findViewById(R.id.btnSub);
btnMul = findViewById(R.id.btnMul);
btnDiv = findViewById(R.id.btnDiv);
result = findViewById(R.id.result);
if (s1.isEmpty() || s2.isEmpty()) {
result.setText("Please enter both numbers");
return;
}
double n1 = Double.parseDouble(s1);
double n2 = Double.parseDouble(s2);
double res = 0;
switch (operator) {
case '+': res = n1 + n2; break;
case '-': res = n1 - n2; break;
case '*': res = n1 * n2; break;
case '/':
if (n2 == 0) {
result.setText("Cannot divide by zero");
return;
}
res = n1 / n2;
break;
}
}
EXPERIMENT NO. 2
Step-by-Step Guide
• Language: Java
3. Add:
i. Button 1:
1. id: @+id/btnA
2. text: Fragment A
ii. Button 2:
1. id: @+id/btnB
2. text: Fragment B
i. id: @+id/fragment_container
iii. layout_weight: 1
LinearLayout (vertical)
├── Button (btnA)
├── Button (btnB)
└── FrameLayout (id = fragment_container)
• Name: FragmentA
package com.example.fragmentsample;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnA = findViewById(R.id.btnA);
btnB = findViewById(R.id.btnB);
fragment_a.xml
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="This is Fragment A"
android:gravity="center"
android:textSize="24sp"/>
fragment_b.xml
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="This is Fragment B"
android:gravity="center"
android:textSize="24sp"/>
EXPERIMENT NO. 3
Step-by-Step Guide
• Add 4 Buttons:
MainActivity.java
package com.example.layoutdemo;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnLinear = findViewById(R.id.btnLinear);
btnRelative = findViewById(R.id.btnRelative);
btnFrame = findViewById(R.id.btnFrame);
btnConstraint = findViewById(R.id.btnConstraint);
btnLinear.setOnClickListener(v ->
startActivity(new Intent(this, LinearLayoutActivity.class)));
btnRelative.setOnClickListener(v ->
startActivity(new Intent(this, RelativeLayoutActivity.class)));
btnFrame.setOnClickListener(v ->
startActivity(new Intent(this, FrameLayoutActivity.class)));
btnConstraint.setOnClickListener(v ->
startActivity(new Intent(this, ConstraintLayoutActivity.class)));
}
}
Create:
• LinearLayoutActivity
• RelativeLayoutActivity
• FrameLayoutActivity
• ConstraintLayoutActivity
activity_linear_layout.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">
<TextView
android:text="This is LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"/>
<Button
android:text="Button 1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="Button 2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
activity_relative_layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txtRel"
android:text="RelativeLayout Example"
android:textSize="20sp"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:layout_below="@id/txtRel"
android:layout_marginTop="20dp"
android:layout_centerHorizontal="true"
android:text="Click Me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
activity_frame_layout.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@android:drawable/ic_menu_gallery"
android:scaleType="centerCrop"/>
<TextView
android:text="Overlay Text"
android:textSize="24sp"
android:textColor="#FFFFFF"
android:layout_gravity="center"/>
</FrameLayout>
activity_constraint_layout.xml
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:text="ConstraintLayout Example"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="30dp"/>
<Button
android:text="Click Here"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
EXPERIMENT NO.4
Step-by-Step Setup
• Add 2 Buttons:
Component Tree:
LinearLayout (vertical)
├── Button (btnSecond)
└── Button (btnThird)
Right-click your package > New > Activity > Empty Activity:
1. SecondActivity
2. ThirdActivity
package com.example.intentdemo;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSecond = findViewById(R.id.btnSecond);
btnThird = findViewById(R.id.btnThird);
btnSecond.setOnClickListener(v -> {
Intent i = new Intent(MainActivity.this, SecondActivity.class);
startActivity(i);
});
btnThird.setOnClickListener(v -> {
Intent i = new Intent(MainActivity.this, ThirdActivity.class);
startActivity(i);
});
}
}
activity_second.xml
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="You are in Second Activity"
android:textSize="24sp"
android:gravity="center"/>
activity_third.xml
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="You are in Third Activity"
android:textSize="24sp"
android:gravity="center"/>
EXPERIMENT NO. 5
Required Permissions
<uses-feature android:name="android.hardware.telephony"
android:required="false"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
Step-by-Step Guide
• Add:
LinearLayout (vertical)
├── EditText (Phone Number)
├── EditText (Message for SMS)
├── Button (btnCall)
└── Button (btnSMS)
Step 2: MainActivity.java
package com.example.intentsmscall;
import android.content.Intent; import android.net.Uri; import
android.os.Bundle; import android.widget.Button; import
android.widget.EditText; import android.widget.Toast; import
androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
EditText editPhone, editMessage;
Button btnCall, btnSMS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editPhone = findViewById(R.id.editPhone);
editMessage = findViewById(R.id.editMessage);
btnCall = findViewById(R.id.btnCall);
btnSMS = findViewById(R.id.btnSMS);
btnCall.setOnClickListener(v -> {
String number = editPhone.getText().toString();
if (!number.isEmpty()) {
Intent callIntent = new Intent(Intent.ACTION_DIAL); // safer than
ACTION_CALL
callIntent.setData(Uri.parse("tel:" + number));
startActivity(callIntent);
} else {
Toast.makeText(this, "Enter phone number",
Toast.LENGTH_SHORT).show();
}
});
btnSMS.setOnClickListener(v -> {
String number = editPhone.getText().toString();
String message = editMessage.getText().toString();
}
}
EXPERIMENT NO. 6
Experiment: Demonstrate Spinners, Touch Mode, Alerts, Popups, Menus, and Toasts
🛠 Step-by-Step Implementation
Add:
Component Tree
LinearLayout
├── Spinner (spinnerColors)
├── Button (btnAlert)
├── Button (btnPopup)
└── TextView (txtContext)
package com.example.exp6;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.*;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
SpinnerColors;
Button btnAlert, btnPopup;
TextView txtContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinnerColors = findViewById(R.id.spinnerColors);
btnAlert = findViewById(R.id.btnAlert);
btnPopup = findViewById(R.id.btnPopUp);
txtContext = findViewById(R.id.txtContext);
spinnerColors.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String selected =
parent.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, "Selected: " + selected,
Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
btnAlert.setOnClickListener(v -> {
new AlertDialog.Builder(MainActivity.this)
.setTitle("Alert!")
.setMessage("This is an alert dialog example.")
.setPositiveButton("OK", (dialog, which) ->
Toast.makeText(this, "OK Pressed",
Toast.LENGTH_SHORT).show())
.setNegativeButton("Cancel", null)
.show();
});
btnPopup.setOnClickListener(v -> {
PopupMenu popup = new PopupMenu(MainActivity.this, btnPopup);
popup.getMenuInflater().inflate(R.menu.popup_menu,
popup.getMenu());
popup.setOnMenuItemClickListener(item -> {
Toast.makeText(this, "Selected: " + item.getTitle(),
Toast.LENGTH_SHORT).show();
return true;
});
popup.show();
});
registerForContextMenu(txtContext);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu, menu);
menu.setHeaderTitle("Choose an option");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
Toast.makeText(this, "Context Item: " + item.getTitle(),
Toast.LENGTH_SHORT).show();
return true;
}
}
res/menu/popup_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/item1" android:title="Popup Item 1"/>
<item android:id="@+id/item2" android:title="Popup Item 2"/>
</menu>
res/menu/context_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/ctx1" android:title="Context Item A"/>
<item android:id="@+id/ctx2" android:title="Context Item B"/>
</menu>
EXPERIMENT No. 7
Step-by-Step Guide
In activity_main.xml:
• Use LinearLayout
o id: btnNotify
1. Right-click your package > New > Activity > Empty Activity
2. Name it SecondActivity
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Opened from Notification!"
android:textSize="24sp"
android:gravity="center"/>
package com.example.notificationdemo;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
Button btnNotify;
final String CHANNEL_ID = "my_channel_id";
final int NOTIFICATION_ID = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnNotify = findViewById(R.id.btnNotify);
createNotificationChannel();
btnNotify.setOnClickListener(v -> showNotification());
}
NotificationManagerCompat notificationManager =
NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());
}
NotificationManager manager =
getSystemService(NotificationManager.class);
if (manager != null) {
manager.createNotificationChannel(channel);
}
}
}
}
Step-by-Step Guide
Add to a LinearLayout:
Step 2: MainActivity.java
package com.example.sdcardwriter;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
EditText editTextData;
Button btnSave;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextData = findViewById(R.id.editTextData);
btnSave = findViewById(R.id.btnSave);
btnSave.setOnClickListener(v -> {
String data = editTextData.getText().toString();
if (!data.isEmpty()) {
saveToSDCard(data);
} else {
Toast.makeText(this, "Enter some text",
Toast.LENGTH_SHORT).show();
}
});
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28"/>
/storage/emulated/0/Android/data/your.package.name/files/Documents/myfile.txt
Step-by-Step Implementation
Step 2: MainActivity.java
package com.example.alarmapp;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.app.TimePickerDialog;
import android.widget.TimePicker;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;
TextView textTime;
Button btnPickTime, btnSetAlarm;
int hour, minute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textTime = findViewById(R.id.textTime);
btnPickTime = findViewById(R.id.btnPickTime);
btnSetAlarm = findViewById(R.id.btnSetAlarm);
btnPickTime.setOnClickListener(v -> {
TimePickerDialog timePickerDialog = new TimePickerDialog(this,
(TimePicker view, int selectedHour, int selectedMinute) ->
{
hour = selectedHour;
minute = selectedMinute;
textTime.setText(String.format("%02d:%02d", hour,
minute));
}, 12, 0, true);
timePickerDialog.show();
});
btnSetAlarm.setOnClickListener(v -> {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
Step 3: AlarmReceiver.java
package com.example.alarmapp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
Test Instructions
1. Run app.
Step-by-Step Guide
package com.example.sqlitedemo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY
AUTOINCREMENT, name TEXT, email TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
Step 3: MainActivity.java
package com.example.sqlitedemo;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editName = findViewById(R.id.editName);
editEmail = findViewById(R.id.editEmail);
btnSave = findViewById(R.id.btnSave);
btnShow = findViewById(R.id.btnShow);
btnSave.setOnClickListener(v -> {
String name = editName.getText().toString();
String email = editEmail.getText().toString();
boolean inserted = dbHelper.insertData(name, email);
if (inserted) {
Toast.makeText(this, "Data Inserted",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Insert Failed",
Toast.LENGTH_SHORT).show();
}
});
btnShow.setOnClickListener(v -> {
String data = dbHelper.getData();
Toast.makeText(this, data.isEmpty() ? "No Data" : data,
Toast.LENGTH_LONG).show();
});
}
}
Test the App