카테고리 없음
안드로이드를 이용한 D-day 어플 만들기
만년필석사
2016. 8. 28. 16:28
반응형
이번시간엔 안드로이드를 이용한 D-day 어플 만드는법을 써본다. 일상생활에서 가장 많이 쓰는 도구중에 하나기도 해서 한번 만들어보고 싶어서 만들어봤다. 이것도 블로그들이나 구글 참조 많이했는데 정신없이 하다보니 출저를 못쓰는 점도 좀 양해바란다.
1. activity_main.xml 코드
이건 내가 직접 디자인하고 코딩한거다. 근데 사람에 따라 맘에 들수도 있고 안들 수도 있으니 그건 생략하겠다.
색깔도 넣어보고 레이아웃 크기 등 다 조절하고 몇시간에 걸쳐 만들었다. 내맘엔 쏙든다. 코드는 다음과 같다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="1">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="370px"
android:orientation="horizontal"
android:id="@+id/linearLayout"
android:layout_alignParentStart="false"
android:layout_alignParentEnd="true"
android:background="@color/material_deep_teal_200"
android:backgroundTintMode="add">
<TextView
android:id="@+id/today"
android:layout_width="match_parent"
android:layout_height="60dp"
android:textSize="40dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:background="@color/material_deep_teal_200" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="120px"
android:text="오늘 날짜"/>
</RelativeLayout>
<TextView
android:id="@+id/dday"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:textSize="120px"
android:layout_weight="0.56"
android:layout_alignParentStart="true"
android:layout_above="@+id/result"
android:layout_alignParentEnd="true"
android:background="@android:color/holo_orange_light" />
<TextView
android:id="@+id/result"
android:layout_width="fill_parent"
android:layout_height="188dp"
android:textSize="120px"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:background="#fff700" />
<Button
android:id="@+id/dateButton"
android:layout_width="fill_parent"
android:layout_height="66dp"
android:text="날짜입력"
android:layout_above="@+id/dday"
android:layout_alignParentStart="true" />
가장 최적의 레이아웃 dp설정이었다. 이거 하느라고 시간 많이 보냈다..-_-;;
2. Main_activity.java 코드
package com.example.gunjoolee.datecal;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private TextView ddayText;
private TextView todayText;
private TextView resultText;
private Button dateButton;
private int tYear; //오늘 연월일 변수
private int tMonth;
private int tDay;
private int dYear=1; //디데이 연월일 변수
private int dMonth=1;
private int dDay=1;
private long d;
private long t;
private long r;
private int resultNumber=0;
static final int DATE_DIALOG_ID=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ddayText=(TextView)findViewById(R.id.dday);
todayText=(TextView)findViewById(R.id.today);
resultText=(TextView)findViewById(R.id.result);
dateButton=(Button)findViewById(R.id.dateButton);
dateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(0);//----------------
}
});
Calendar calendar =Calendar.getInstance(); //현재 날짜 불러옴
tYear = calendar.get(Calendar.YEAR);
tMonth = calendar.get(Calendar.MONTH);
tDay = calendar.get(Calendar.DAY_OF_MONTH);
Calendar dCalendar =Calendar.getInstance();
dCalendar.set(dYear,dMonth, dDay);
t=calendar.getTimeInMillis(); //오늘 날짜를 밀리타임으로 바꿈
d=dCalendar.getTimeInMillis(); //디데이날짜를 밀리타임으로 바꿈
r=(d-t)/(24*60*60*1000); //디데이 날짜에서 오늘 날짜를 뺀 값을 '일'단위로 바꿈
resultNumber=(int)r+1;
updateDisplay();
}//OnCreate end
private void updateDisplay(){
todayText.setText(String.format("%d년 %d월 %d일",tYear, tMonth+1,tDay));
ddayText.setText(String.format("%d년 %d월 %d일",dYear, dMonth+1,dDay));
if(resultNumber>=0){
resultText.setText(String.format("D-%d", resultNumber));
}
else{
int absR=Math.abs(resultNumber);
resultText.setText(String.format("D+%d", absR));
}
}//디데이 날짜가 오늘날짜보다 뒤에오면 '-', 앞에오면 '+'를 붙인다
private DatePickerDialog.OnDateSetListener dDateSetListener=new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
dYear=year;
dMonth=monthOfYear;
dDay=dayOfMonth;
final Calendar dCalendar =Calendar.getInstance();
dCalendar.set(dYear,dMonth, dDay);
d=dCalendar.getTimeInMillis();
r=(d-t)/(24*60*60*1000);
resultNumber=(int)r;
updateDisplay();
}
};
@Override
protected Dialog onCreateDialog(int id){
if(id==DATE_DIALOG_ID){
return new DatePickerDialog(this,dDateSetListener,tYear,tMonth,tDay);
}
return null;
}
}
이건 95프로 블로그 글에 도움을 많이받았다. 출저에 대해 못쓰는거는 양해부탁드린다.
3. 실행 결과 화면
저렇게 잘 코딩을 하고 지니모션 실행을 하면 다음과 같다.
이게 내 핸드폰(갤럭시 S7, API23)으로 테스트해서 지니모션으로 돌리면 이런식으로 나오는데 이건 본인 핸드폰에 맞게 크기 설정해서 쓰면 될거같다. 내 핸드폰 기준으로는 딱맞는 크기였다. 원하는 날짜를 선택하면 몇일이 지나고 몇일이 남았는지 잘 표시 된다는 걸 알 수 있다.
반응형