안드로이드(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)를 통해 윈도우 화면 미러링 방법

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

base64 인코딩 디코딩 예제 c 소스

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