[Android] 나만의 다이어리 앱 만들기 프로젝트5
이번 포스팅부터는 설계했던 앱 디자인의 내부 기능들을 실제로 구현할 것입니다.
만들어야 할 기능들이 많지만 하나하나 차근차근 만들어가보도록 하겠습니다.
메인화면
다시한번 돌이켜보면 메인화면에 필요한 것들은
- 달력
- 연락처 버튼
- 일정추가 버튼
3가지 입니다.
우선, 저번 디자인설계때 메인화면에 달력을 추가해놨을겁니다. 달력에서 날짜를 클릭했을 때 아래쪽에 날짜와 텍스트가 출력되도록 코드를 만들어보겠습니다.
MainActivity.java 코드
public class MainActivity extends AppCompatActivity {
private CalendarView calendarView;
private TextView diaryText, DateView;
private ImageButton button_GotoPhoneBook,button_GotoDiary;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //앱 실행 시 최초 화면
initViews();
//달력에서 날짜 선택하면 활성화
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener()
{
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth)
{
diaryText.setVisibility(View.VISIBLE);
DateView.setVisibility(View.VISIBLE);
DateView.setText(String.format("%d / %d / %d", year, month + 1, dayOfMonth));
diaryText.setText("일정 표시"); //해당 날짜 일정을 보여줌(미구현)
}
});
}
//뷰 초기화
public void initViews(){
calendarView = findViewById(R.id.calendarView);
diaryText = findViewById(R.id.diaryText);
DateView = findViewById(R.id.DateView);
button_GotoDiary = findViewById(R.id.button_GotoDiary);
button_GotoPhoneBook = findViewById(R.id.button_GotoAddList);
}
}
onCreate() 함수는 C에서의 main함수와 같습니다.
initViews 라는 함수를 정의해서 객체들을 연결시켜주는 부분을 따로 만들어주어 onCreate() 함수안의 내용이 더러워지지 않도록 했습니다.
달력을 클릭했을 때 이벤트가 발생하는 setOnDateChangeListener 안의 onSelectedDayChange 함수에
날짜, 텍스트를 표시해주는 뷰들을 setVisibility 메소드로 VISIBLE 하게 만들어주었습니다. (클릭시 보이게 됨)
다음으로 연락처, 일정화면으로 갈 수 있도록하는 버튼 기능을 만들어줍니다.
//일정추가(+) 버튼클릭
button_GotoDiary.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent DiaryIntent = new Intent(getApplicationContext(), DiaryActivity.class);
startActivity(DiaryIntent);
finish();
}
});
//연락처 버튼클릭
button_GotoPhoneBook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent PhoneBookIntent = new Intent(getApplicationContext(), PhoneBookActivity.class);
startActivity(PhoneBookIntent);
finish();
}
});
버튼을 누르게되면 새로운 Intent 객체를 생성하여 지정해준 액티비티를 실행시킬 수 있습니다.
일정화면
일정화면의 기능은 4가지입니다.
- 홈버튼
- 검색기능
- 글쓰기 버튼
- 목록선택
우선, 홈버튼과 글쓰기 버튼을 만듭니다.
DiaryActivity.java 코드
public class DiaryActivity extends AppCompatActivity {
private ImageButton button_home;
private Button button_GotoAddList;
private EditText searchTitle;
public ListView lvList = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary_main);
initView();
//홈 버튼
button_home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent goHome = new Intent(getApplicationContext(),MainActivity.class);
startActivity(goHome);
finish();
}
});
//글 쓰기 화면 이동
button_GotoAddList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent GotoAddList = new Intent(getApplicationContext(),DiaryAddActivity.class);
startActivity(GotoAddList);
finish();
}
});
//뷰 초기화
public void initView(){
lvList = findViewById(R.id.lv_list);
searchTitle = findViewById(R.id.searchTitle);
button_home = findViewById(R.id.button_home);
button_GotoAddList = findViewById(R.id.button_GotoAddList);
}
}
}
연락처화면
연락처 화면은 일정 화면과 비슷합니다.
- 홈버튼
- 검색 기능
- 연락처 추가버튼
- 목록 선택
마찬가지로 홈버튼과 연락처 추가 버튼 기능을 만들어 줍니다.
PhoneBookActivity.java 코드
public class PhoneBookActivity extends AppCompatActivity {
private ImageButton button_home;
private Button button_GotoAddPhone;
private EditText searchName;
public ListView lvList1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phonebook_main);
initViews();
//홈 버튼클릭
button_home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent goBack = new Intent(getApplicationContext(),MainActivity.class);
startActivity(goBack);
finish();
}
});
//연락처추가 버튼클릭
button_GotoAddPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent GotoAddPhone = new Intent(getApplicationContext(),PhoneBookAddActivity.class);
startActivity(GotoAddPhone);
finish();
}
});
}
//뷰 초기화
public void initViews(){
lvList1 = findViewById(R.id.lv_list1);
searchName = findViewById(R.id.searchName);
button_home = findViewById(R.id.button_home);
button_GotoAddPhone = findViewById(R.id.button_GotoAddPhone);
}
}
얼추 모양새는 갖췄습니다.
마지막으로 글 쓰기 화면과 연락처 추가 화면만 달아주면 될 것 같습니다.
글 쓰기 화면
글 쓰기 화면에서는 제목과 글 내용을 입력해서 저장할 수 있는 화면입니다.
아직 저장을 할 순 없으므로 버튼만 달아둡니다.
DiaryAddActivity.java 코드
public class DiaryAddActivity extends AppCompatActivity {
private ImageButton button_back;
private Button button_save;
private EditText title, content;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary_writing);
initView();
//뒤로가기 버튼
button_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent goBack = new Intent(getApplicationContext(),DiaryActivity.class);
startActivity(goBack);
finish();
}
});
}
//뷰 초기화
public void initView(){
title = findViewById(R.id.title);
content = findViewById(R.id.content);
button_back = findViewById(R.id.button_back);
button_save = findViewById(R.id.button_save);
}
}
연락처 추가 화면
연락처 추가 화면에서는 이름과 전화번호를 입력해서 연락처를 추가할 수 있는 화면입니다.
아직 저장을 할 순 없으므로 버튼만 달아둡니다.
PhoneBookAddActivity.java 코드
public class PhoneBookAddActivity extends AppCompatActivity {
private ImageButton button_back;
private EditText input_Name, input_Phone;
private Button button_add;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phonebook_add);
initViews();
//뒤로가기 버튼
button_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent goBack = new Intent(getApplicationContext(),PhoneBookActivity.class);
startActivity(goBack);
finish();
}
});
}
//뷰 초기화
public void initViews(){
input_Name = findViewById(R.id.input_Name);
input_Phone = findViewById(R.id.input_Phone);
button_back = findViewById(R.id.button_back);
button_add = findViewById(R.id.button_add);
}
}
다음 포스팅에서는 데이터베이스를 설계하고 실제로 구현해보도록 하겠습니다.
댓글남기기