카테고리: 개발관련
안드로이드 Navigation Key가 Software인지 Hardware인지 확인하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public boolean hasSoftwareKeys() { boolean hasSoftwareKeys = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ Display display = getWindowManager().getDefaultDisplay(); DisplayMetrics realMetrics = new DisplayMetrics(); display.getRealMetrics(realMetrics); DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics); hasSoftwareKeys = (realMetrics.widthPixels - metrics.widthPixels) > 0 || (realMetrics.heightPixels - metrics.heightPixels) > 0; } else { boolean hasMenuKey = ViewConfiguration.get(this).hasPermanentMenuKey(); boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); hasSoftwareKeys = !hasMenuKey && !hasBackKey; } return hasSoftwareKeys; } |
안드로이드 StatusBar, ActionBar, NavigationBar 높이 가져오기
StatusBar
1 2 3 4 5 | int statusBarHeight = 0; int resId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resId > 0) { statusBarHeight = getResources().getDimensionPixelSize(resId); } |
ActionBar
1 2 3 4 5 6 | int actionBarHeight = 0; final TypedArray styledAttributes = getTheme().obtainStyledAttributes( new int[] { android.R.attr.actionBarSize } ); actionBarHeight = (int) styledAttributes.getDimension(0, 0); styledAttributes.recycle(); |
NavigationBar
1 2 3 4 5 | int navigationBarHeight = 0; int resId = getResources().getIdentifier("navigation_bar_height", "dimen", "android"); if (resId > 0) { navigationBarHeight = getResources().getDimensionPixelSize(resId); } |
Docker 한글 문제와 TimeZone 수정하는 방법
Docker를 활용하여 필요한 Image를 만들어서 사용하는 경우가 있는데 한글이 제대로 표시되지 않거나 한글 파일명 처리에 문제가 발생하는 경우가 있습니다. 또한 TimeZone의 기본값이 UTC이기 때문에 필요에 따라 변경을 해야하는 경우가 있습니다. 이런 경우 간단하게 Dockerfile을 몇 줄만 추가하여 주시면 됩니다. Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 사용하려는 Docker Image FROM ubuntu:16.04 # fonts-noto-cjk는 일본어/중국어도 필요한 경우에만 추가해 주시면 됩니다. RUN apt-get update && apt-get install -y \ language-pack-ko \ fonts-nanum \ fonts-nanum-coding \ fonts-noto-cjk # 언어 설정 RUN locale-gen ko_KR.UTF-8 ENV LANG ko_KR.UTF-8 ENV LANGUAGE ko_KR.UTF-8 ENV LC_ALL ko_KR.UTF-8 # TimeZone 설정 ENV TZ Asia/Seoul RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone |
Build and Run
1 2 3 | docker build -t myimage:1.0 . docker run -d -it --name mycontainer myimage:1.0 /bin/bash |
Verify
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | root@a3c20cb6212d:/$ locale LANG=ko_KR.UTF-8 LANGUAGE=ko_KR.UTF-8 LC_CTYPE="ko_KR.UTF-8" LC_NUMERIC="ko_KR.UTF-8" LC_TIME="ko_KR.UTF-8" LC_COLLATE="ko_KR.UTF-8" LC_MONETARY="ko_KR.UTF-8" LC_MESSAGES="ko_KR.UTF-8" LC_PAPER="ko_KR.UTF-8" LC_NAME="ko_KR.UTF-8" LC_ADDRESS="ko_KR.UTF-8" LC_TELEPHONE="ko_KR.UTF-8" LC_MEASUREMENT="ko_KR.UTF-8" LC_IDENTIFICATION="ko_KR.UTF-8" LC_ALL=ko_KR.UTF-8 root@a3c20cb6212d:/$ date 2017. 10. 24. (화) 18:04:53 KST |
Java Thread Control – pause/resume/stop demo
Thread는 개발하면서 많이 쓰이는 클래스 중 하나 입니다. 하지만 요구사항에 따라서는 Thread의 Pause, Resume, Stop이 필요한 경우가 생기는데 이 때 활용 할 수 있는 Thread Demo Class 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | public class ThreadDemo implements Runnable { private String mName; private Thread mThread; private boolean mStop = false; private boolean mPause = false; public ThreadDemo(String name) { mName = name; } @Override public void run() { try { while(!mStop) { synchronized(this) { while(mPause) { wait(); } } // TODO: insert your work code } } catch(InterruptedException e) { e.printStackTrace(); } } public void start() { if(mThread == null) { mThread = new Thread(this, mName); mThread.start(); } } public void stop() { mStop = true; } public void pause() { mPause = true; } public synchronized void resume() { mPause = false; notify(); } } |