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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="30dp"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:gravity="center"
android:text="Zodiac Sign"
android:textStyle="bold"
android:textSize="30sp"/>
<EditText
android:id="@+id/firstNameEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:hint="First Name"
android:inputType="textPersonName"
android:textSize="20sp" />
<EditText
android:id="@+id/lastNameEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:hint="Last Name"
android:inputType="textPersonName"
android:textSize="20sp" />
<EditText
android:id="@+id/birthEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:hint="Date of Birth"
android:inputType="date"
android:textSize="20sp" />
<Button
android:id="@+id/zodiacButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Get Zodiac"
android:textSize="20sp" />
</LinearLayout>
activity_zodiac.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"
android:orientation="vertical"
android:backgroundTint="@color/white"
android:layout_margin="20dp"
android:padding="16dp">
<TextView
android:id="@+id/firstNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="First Name:"
android:textSize="20sp"/>
<TextView
android:id="@+id/lastNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Last Name:"
android:textSize="20sp"/>
<ImageView
android:id="@+id/zodiacImageView"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_gravity="center"
android:layout_marginBottom="10dp" />
<TextView
android:id="@+id/zodiacDescriptionTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Zodiac Description"
android:textSize="18sp"
android:layout_marginBottom="20dp"/>
<Button
android:id="@+id/btnBack"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Back to Main Page" />
</LinearLayout>
MainActivity.java
package com.example.zodiacapp;
import android.app.DatePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
final Calendar myCalendar = Calendar.getInstance();
private EditText firstNameEditText, lastNameEditText, birthEditText;
private Button zodiacButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstNameEditText = findViewById(R.id.firstNameEditText);
lastNameEditText = findViewById(R.id.lastNameEditText);
birthEditText = findViewById(R.id.birthEditText);
zodiacButton = findViewById(R.id.zodiacButton);
DatePickerDialog.OnDateSetListener date = new
DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int
day) {
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, month);
myCalendar.set(Calendar.DAY_OF_MONTH, day);
updateLabel();
}
};
birthEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new DatePickerDialog(MainActivity.this, date,
myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
zodiacButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,
ZodiacActivity.class);
intent.putExtra("firstName",
firstNameEditText.getText().toString());
intent.putExtra("lastName",
lastNameEditText.getText().toString());
intent.putExtra("day",
myCalendar.get(Calendar.DAY_OF_MONTH));
intent.putExtra("month", myCalendar.get(Calendar.MONTH) +
1); // Month is 0-based
intent.putExtra("year", myCalendar.get(Calendar.YEAR));
startActivity(intent);
}
});
private void updateLabel() {
String myFormat = "MM/dd/yyyy";
SimpleDateFormat dateFormat = new SimpleDateFormat(myFormat,
Locale.getDefault());
birthEditText.setText(dateFormat.format(myCalendar.getTime()));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.mainPage) {
startActivity(new Intent(this, MainActivity.class));
return true;
} else if (itemId == R.id.recentResults) {
startActivity(new Intent(this, RecentResultsActivity.class));
return true;
} else if (itemId == R.id.aboutAuthor) {
startActivity(new Intent(this, AboutAuthorActivity.class));
return true;
} else if (itemId == R.id.exitApp) {
finish();
System.exit(0);
return true;
}
return super.onOptionsItemSelected(item);
}
}
ZodiacActivity.java
package com.example.zodiacapp;
import android.content.Intent;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ZodiacActivity extends AppCompatActivity {
private TextView firstNameTextView, lastNameTextView,
zodiacDescriptionTextView;
private ImageView zodiacImageView;
private Button btnBack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zodiac);
firstNameTextView = findViewById(R.id.firstNameTextView);
lastNameTextView = findViewById(R.id.lastNameTextView);
zodiacDescriptionTextView =
findViewById(R.id.zodiacDescriptionTextView);
zodiacImageView = findViewById(R.id.zodiacImageView);
btnBack = findViewById(R.id.btnBack);
String firstName = getIntent().getStringExtra("firstName");
String lastName = getIntent().getStringExtra("lastName");
int day = getIntent().getIntExtra("day", 1);
int month = getIntent().getIntExtra("month", 1);
int year = getIntent().getIntExtra("year", 2000);
firstNameTextView.setText("First Name: " + firstName);
lastNameTextView.setText("Last Name: " + lastName);
String zodiacSign = getZodiacSign(day, month);
String zodiacDescription = getZodiacDescription(zodiacSign);
int zodiacImage = getZodiacImage(zodiacSign);
zodiacDescriptionTextView.setText(zodiacDescription);
zodiacImageView.setImageResource(zodiacImage);
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent back = new Intent(ZodiacActivity.this,
MainActivity.class);
startActivity(back);
}
});
}
private String getZodiacSign(int day, int month) {
// Simplified logic to determine zodiac sign based on date
if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) {
return "Aquarius";
} else if ((month == 2 && day >= 19) || (month == 3 && day <= 20))
{
return "Pisces";
} else if ((month == 3 && day >= 21) || (month == 4 && day <= 19))
{
return "Aries";
} else if ((month == 4 && day >= 20) || (month == 5 && day <= 20))
{
return "Taurus";
} else if ((month == 5 && day >= 21) || (month == 6 && day <= 20))
{
return "Gemini";
} else if ((month == 6 && day >= 21) || (month == 7 && day <= 22))
{
return "Cancer";
} else if ((month == 7 && day >= 23) || (month == 8 && day <= 22))
{
return "Leo";
} else if ((month == 8 && day >= 23) || (month == 9 && day <= 22))
{
return "Virgo";
} else if ((month == 9 && day >= 23) || (month == 10 && day <= 22))
{
return "Libra";
} else if ((month == 10 && day >= 23) || (month == 11 && day <=
21)) {
return "Scorpio";
} else if ((month == 11 && day >= 22) || (month == 12 && day <=
21)) {
return "Sagittarius";
}
return "Capricorn";
}
private String getZodiacDescription(String zodiacSign) {
AssetManager am = getAssets();
try {
InputStream inputStream = am.open("zodiac_description.txt");
BufferedReader reader = new BufferedReader(new
InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
if (line.startsWith(zodiacSign)) {
while ((line = reader.readLine()) != null && !
line.isEmpty()) {
stringBuilder.append(line).append("\n");
}
break;
}
}
reader.close();
return stringBuilder.toString();
} catch (IOException e) {
e.printStackTrace();
return "Description not available.";
}
}
private int getZodiacImage(String zodiacSign) {
switch (zodiacSign) {
case "Aquarius":
return R.drawable.aquarius;
case "Pisces":
return R.drawable.pisces;
case "Taurus":
return R.drawable.taurus;
case "Cancer":
return R.drawable.cancer;
case "Libra":
return R.drawable.libra;
case "Virgo":
return R.drawable.virgo;
case "Gemini":
return R.drawable.gemini;
case "Sagittarius":
return R.drawable.sagittarius;
case "Scorpio":
return R.drawable.scorpio;
case "Leo":
return R.drawable.leo;
case "Aries":
return R.drawable.aries;
default:
return R.drawable.capricorn;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.mainPage) {
startActivity(new Intent(this, MainActivity.class));
return true;
} else if (itemId == R.id.recentResults) {
startActivity(new Intent(this, RecentResultsActivity.class));
return true;
} else if (itemId == R.id.aboutAuthor) {
startActivity(new Intent(this, AboutAuthorActivity.class));
return true;
} else if (itemId == R.id.exitApp) {
finish();
System.exit(0);
return true;
}
return super.onOptionsItemSelected(item);
}
}
main_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/mainPage" android:title="Main Page"/>
<item android:id="@+id/recentResults" android:title="Recent Results"/>
<item android:id="@+id/aboutAuthor" android:title="About Author"/>
<item android:id="@+id/exitApp" android:title="Exit"/>
</menu>
Screenshots: