안드로이드(android) 전체 화면 시계 앱(clock app) 예제 코드
본 글은 안드로이드 전체 화면 시계 앱 예제 소스를 싣고 있다.
폰에서 기본으로 제공하는 시계app에는 초까지 나오지 않아 초가 나오는 시계를
만들기로 했다. 원하는 스타일은 아래처럼 검은 바탕에 날짜와 시간만 나오는
것이다.
먼저 android studio에서 새 프로젝트를 생성한다.
Activity는 Empty Activity를 사용했다.
팔레트에 있는 TextClock을 넣어서 빌드한 후 실행해보면 초는 안나오고
오전/오후, 시간 그리고 분이 나온다.
TextClock는 사용하지 말고, Calender에서 시간을 받아온후 TextView를 통해
시간을 보여주기로 방향을 전환했다.
Activity_main에 날자를 보여줄 TextView와 시간을 보여줄 TextView두개를
만든다. 그리고 배경은 검은색으로 설정한다.
Runnable을 사용하여 Thread 내부에서 Calendar에서 받아온 시간을 TextView에
업데이트 하도록 코드를 구성했다.
안드로이드 앱 실행 중 화면이 꺼지지 않도록 아래 코드도 추가했다.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
MainActivity.java
package com.example.r.myclock;
import android.graphics.Color;
import android.graphics.Point;
import android.icu.util.Calendar;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.pm.ActivityInfo;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements Runnable{
private Thread
mWorker = null;
private LinearLayout mViewLayout =
null;
private TextView
mTimeView = null;
private TextView
mDayView = null;
private boolean mRun
= false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mViewLayout = (LinearLayout)
findViewById(R.id.view_layout);
mDayView =
(TextView)findViewById(R.id.day_view);
mDayView.setGravity(Gravity.BOTTOM);
mDayView.setTextSize(18);
mDayView.setTextColor(Color.LTGRAY);
mDayView.setText(String.format(""));
mTimeView =
(TextView)findViewById(R.id.time_view);
mTimeView.setTextSize(30);
mTimeView.setTextColor(Color.LTGRAY);
mTimeView.setText(String.format(""));
start();
}
@Override
public void onBackPressed() {
super.onBackPressed();
stop();
}
@Override
protected void onDestroy() {
super.onDestroy();
stop();
}
void start()
{
if(mWorker!= null)
{
stop();
}
mRun = true;
mWorker = new Thread(this);
mWorker.start();
}
void stop()
{
if(mWorker != null && mWorker.isAlive())
{
mRun = false;
mWorker.interrupt();
wait(1000);
mWorker = null;
}
}
@Override
public void run() {
while(mRun)
{
Calendar calendar =
Calendar.getInstance();
int yy =
calendar.get(Calendar.YEAR);
int mm =
calendar.get(Calendar.MONTH)+1;
int dd =
calendar.get(Calendar.DAY_OF_MONTH);
int h =
calendar.get(Calendar.HOUR_OF_DAY);
int m =
calendar.get(Calendar.MINUTE);
int s =
calendar.get(Calendar.SECOND);
mDayView.setText(String.format("%04d-%02d-%02d",yy,mm,dd));
mTimeView.setText(String.format("%02d:%02d:%02d",h,m,s));
wait(200);
}
}
private void wait(int ms){
SystemClock.sleep(ms);
}
}
안드로이드 앱에서 타이틀 바를 없애기 위해 styles.xml에 "windowNoTitle"을 추가 하였으며, 전체 화면으로 보여주기 위해
"android:windowFullscreen"도 추가
하였다.
실행 결과는 아래와 같다.
😅
이 포스트를 올리고 나서 우연히 휴대폰 잠금화면에서 시간을 터치했더니 초까지
표시되는 시계가 나왔다.
댓글
댓글 쓰기