안드로이드(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"도 추가 하였다.




실행 결과는 아래와 같다.
 

😅
이 포스트를 올리고 나서 우연히 휴대폰 잠금화면에서 시간을 터치했더니 초까지 표시되는 시계가 나왔다. 

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

python asyncio를 이용한 async socket server client example code

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제