Android/Reference

StringFormat Android에서 String.xml을 동적으로 사용하고 싶은 상황이 있을 수 있다. 계속해서 변하는 값을 알려주기 위해서는 String Formatter 를 사용한 Format String 으로 표현될 수 있다. 서식 문자열의 앞에 "%"를 붙여 문자열에 기술해 두면 그 그위치에 변수의 값을 형식화하여 넣을 수 있다. %1$s 는 첫 번째 파라미터에 String 값이 들어오고, %2$d 는 두 번째 파라미터에 십진수 숫자가 들어온다는 뜻의 인자이다. Dynamic Text, %1$s! Change %2$d count. 위 Resource를 코드에서 사용 var text = getString(R.string.dynamic_text, printMsg, count) Databindin..
Android Jetpack 아키텍처의 구성 요소 중 하나로 안드로이드의 백그라운드 작업을 처리하는 방법이다. 앱이 종료되거나 기가가 다시 시작되어도 실행 예정인 지연 가능한 비동기 작업을 쉽게 예약할 수 있게 해준다. 하나의 코드로 API Level 마다 비슷한 동작을 보장한다. WorkerManager 구성요소 Worker 백그라운드에서 수행될 테스크를 의미 추상 클래스인 Worker를 상속한 클래스를 구현하고 Override 되는 doWork() 메소드 안에 동작할 테스크를 구현해야 한다. WorkRequest WorkManager에 수행할 테스크를 요청할 때 사용되는 클래스 수행할 Worker를 등록해야 하고, 한번만 실행할 것인지 주기적으로 실행할 것인지 설정할 수 있다. OneTimeWorkR..
작업 진행 중 View를 다시 구성하거나 그릴 때 invalidate()와 requestLayout()을 사용하는데 이 둘의 차이점이 궁금해서 찾아보았다. View의 생명주기를 알아야 하는데 invalidate()는 draw를 다시 하도록 요청하고 requestLayout()은 measure를 통한 사이즈 체크부터 다시 시작한다. 단순한 변경 사항을 보여주기 위하여 다시 그리는 경우에는 invalidate()를 사용하고 사이즈가 바뀌어 뷰간의 경계에도 영향을 준다면 requestLayout()을 호출해야 한다.
앱들을 사용하다 보면 스크롤할 때나 상단에 검색 툴바, 하단의 바가 사라질 때가 있고 나타날 때가 있다. 이러한 효과를 사용해보기 위함도 있고 코드본을 가지고 있기 위해 구현해 보았다. CoordinatorLayout 먼저 숨김처리 효과를 구현하기 위해 CoordinatorLayout을 사용해야 한다. CoordinatorLayout의 Behavior를 통해 자식 뷰들 간에 상호작용을 제공한다. 이 Layout을 이용하면 자식 뷰들을 드래그하여 움직이는 것도 가능하고 패널을 스와이프 해 지우기 또는 애니메이션 적용 등 다양한 기능을 활용할 수 있다고 한다. AppBarLayout LinearLayout을 상속한 스크롤 제스처에 몇 가지 동작을 할 수 있다. 이 레이아웃은 자식으로 ToolBar를 지니고 ..
프로젝트를 진행하다가 안드로이드의 개발자옵션처럼 빌드번호를 여러 번 클릭해 개발자옵션을 켜는 것과 비슷하게 클릭 횟수를 Count 해서 특정 코드를 실행하는 Listener가 필요했다. 배치되어 있는 버튼에 사용하였으면 바로 Activity나 Fragment에서 처리가 가능하겠지만 RecyclerView의 Item을 클릭 시 처리를 해야 했기 때문에 Click Listener를 Item에 따로 지정해주는 방식으로 작성했다. Kotlin을 주로 사용하였지만 이번 프로젝트는 Java로 진행하여 시간이 날 때 코틀린으로 작성할 것이다. 일단 따로 Item에 지정해줄 ClickListener를 만들었다. public abstract class OnClickCountListener implements View.O..
WakeLock은 PowerManger 클래스의 메소드이며 앱이 항상 켜져있음을 나타내는 메커니즘 안드로이드 기능 WakeLock을 사용하기 위해서는 안드로이드 권한을 얻어야 한다. AndroidManifest.xml 매니페스트에 WAKE_LOCK 권한을 추가한다. WakeLock을 사용하기 위해 PowerManager와 WakeLock객체를 선언해야한다. var powerManager: PowerManager? = null var wakeLock: WakeLock? = null 다른 Flag도 있지만 일단 필요한 것만 적었다. wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK , "com.example.jetpacksemi..
특정 팝업이나 공지사항 알림 등 앱을 개발할 때 여러 목적으로 항목을 표시하는 인디케이터를 사용할 때가 많다. 실습으로는 코드상에서 ImageView를 생성하여 추가한 후 LinearLayout에 추가하여 목적에 따라 구현하였다. 사용된 이미지와 인디케이터 drawable과 selector, dimen xml Fragment, Dialog에 적용할 때도 많으나 실습으로는 Activity에서 진행하였다. class IndicatorActivity : AppCompatActivity() { lateinit var indicatorContainer: LinearLayout //인디케이터를 표시할 LinearLayout lateinit var contentsContainer: LinearLayout //내용을 ..
RecyclerView를 사용하는 가장 기본적인 구성은 옆과 같이 가로나 세로로 1열로 정렬하는 형태일 것이다. (LinearLayoutManager) 구현 의도에 따라 필요에 따라 열(Row)마다 차지하는 Column 갯수가 다르게 해야 하는 경우가 있다. 이처럼 차지하는 Column 갯수가 다르게 하고 싶을때 GridLayoutManager의 SpanSizeLookup함수를 사용한다 아래코드는 화면 값을 구해 특정 영역을 뺀 값을 계산 후 Adapter 내에서 data를 통해 position 값으로 return 하는 값을 분기하여 받아 온 후 spansize를 구해 지정해 주는 코드 val currentWidth = getDeviceWidth(context) - (mActivity.resources...
현재 날짜 시스템 currentTimeMillis로 현재 날짜와 시간을 구하고 Date로 만듬 val date = Date(System.currentTimeMillis()) DateFormat으로 년도 월 일 시 분 초로 원하는 형식(중간에 기호 등)으로 출력 가능 ("yyyy/MM/dd HH:mm:ss") 시간을 표시할 때 HH 면 24시 기준 hh면 12 기준이다 val sdfCurrent = SimpleDateFormat("yyyyMMddHHmm") String으로 변환 val formatDate: String = sdfCurrent.format(date) 사용 취지에 맞게 long이나 int로 변환하여 사용 (년도에서 분까지 쓰게되면 long 추천 - 자료값 범위 때문 val currentDate..
bumjae
'Android/Reference' 카테고리의 글 목록 (3 Page)