프로그래밍/android 53

[kotlin] for문 다양한 사용법

코틀린 문법은 전체적으로 직관적이다. 하지만 c 나 c++, java와 같은 과거의 코드 방식에 적응되어 있는 경우 종종 헷갈린다. 어렵지 않으니 정리나 좀 해보자. 1. for문 0 ~ 9까지 (1씩 증가) // java for(int i = 0; i < 10; i++) { } // kotlin for(i in 0 until 10) { } 2. for문 0 ~ 10까지 (1씩 증가) // java for(int i = 0; i = 0; i -= 2) { } // kotlin for(i in 10 downTo step(2)) { } 6. array 배열 (Foreach) // java int array[] = {0, 1, 2, 3, 4}; for(int data : array) { } // kotlin ..

[kotlin] 커스텀 리스너(Custom Listener)를 람다(Lamda) 형식으로 사용하기

[java에서의 사용방법] java에서는 콜백 즉, 어떠한 이벤트를 받아 오기 위해 리스너를 사용하는데 형태는 아래와 같다. 1. DataChangeListener 라는 커스텀 리스너 interface 생성 (MyCustomView.java) public class MyCustomView extends View { DataChangeListener dataChangeListener; interface DataChangeListener { void onChanged(int index, String value); } public MyCustomView(Context context) { super(context); } public void setOnDataChangeListener(DataChangeListe..

[android] 강제 회전 시키기 #screenOrientation (portrait <---> landscape)

대부분의 앱은 세로모드(portrait)로 고정해서 개발을 하는데, 필요할 때 가로(landscape)로 전환해야 할 때가 있다. 폰의 회전에 따라서 자동으로 바뀌는 것이 아니라 회전과는 무관하게 그냥 가로모드/세로모드를 변경해야 할 때가 있다는 것이다. 1. 자동회전이 아닌, 강제로 가로/세로로 바꾸게 되면 onConfigurationChanged(newConfig: Configuration) 함수가 호출되지 않고 onCreate(savedInstanceState: Bundle?)로 진입되어 화면을 새롭게 그려야 한다. 그렇기 때문에 반드시 android:configChanges="orientation|screenSize" 를 지정해 주어야 한다. 2. 회전되었을 때 onConfigurationChan..

[android] 안드로이드 ImageView gif 적용하기 (feat. Glide)

안드로이드 앱을 만들때, gif를 출력하기 위해서는 라이브러리를 사용해야 한다. 그 중에서 쉽고 편한 Glide 라이브러리를 이용해보자. 1. res 디렉토리에 raw폴더를 추가하여 gif 파일을 넣는다. 즉, 'main/res/raw' 에 gif 파일 추가. 2. build.gradle(:app)에 glide 모듈 추가 implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' 3. xml에는 별거 없이 그냥 ImageView를 선언 4. 코드 적용 Glide.with(this).load(R.raw.loading).override(200, 200)...

[kotlin] 특정 날짜가 속해있는 달에서 '특정 날짜와 같은 요일'의 날짜 구하기

특정 날짜가 속해있는 달에서 '특정 날짜와 같은 요일'의 날짜를 구하기 위한 함수이다. /** * 특정 날짜가 속해있는 달에서 특정 날짜와 같은 요일의 날짜 구하기 * @param eventDate ex) 2020-10-10 * */ fun day(eventDate: String){ val dateArray = eventDate.split("-").toTypedArray() val cal = Calendar.getInstance() cal[dateArray[0].toInt(), dateArray[1].toInt() - 1] = dateArray[2].toInt() // 요일 확인(일요일:1, 월요일:2, ... ,토요일:7) var dayOfWeek = cal.get(Calendar.DAY_OF_WEEK..

[kotlin] 특정 날짜가 속해있는 1주일간의 날짜 범위

특정 날짜가 속해있는 1주일간의 날짜 범위를 알아내기 위한 함수이다. /** * 특정 날짜의 같은 한 주간의 날짜 범위 * @param eventDate ex) 2020-10-10 * */ fun week(eventDate: String) { val dateArray = eventDate.split("-").toTypedArray() val cal = Calendar.getInstance() cal[dateArray[0].toInt(), dateArray[1].toInt() - 1] = dateArray[2].toInt() // 일주일의 첫날을 일요일로 지정한다 cal.firstDayOfWeek = Calendar.SUNDAY // 시작일과 특정날짜의 차이를 구한다 val dayOfWeek = cal[C..

android studio xml tab spacing

나는 안드로이드 xml을 아직도 코드로 작업하는 습관이 남아 있기에 layout을 깔끔하게 맞추는 걸 선호한다. New Project를 생성하면 tab spacing이 초기값으로 설정되는지 따닥따닥 붙어 있는게 보기 좋지 않다. 따라서 아래의 값으로 맞춰서 작업한다. Mac OS에서 Android Studio를 사용하는 경우에는 Preferences > Appearance & Behavior > Editor > Code Style > XML Tab size : 4 Indent : 4 Continuation indent : 8

[android] 안드로이드 웹뷰 로컬 스토리지 사용하기 옵션 (webview local storage)

최근 하이브리드 웹앱 개발을 지원해 주는 역할을 하고 있는데 웹 개발자로부터 로컬 스토리지를 사용할 수 있냐는 질문에, 알아보니 webView 옵션 중에서 domStorageEnabled 값을 true 변경해야 한다. 기본적으로 false값으로 설정이 되어 있기 때문에 적용하지 않으면 사용이 불가하다. 코틀린 코드 기준으로 webView.settings.domStorageEnabled = true 이렇게 코드 한 줄만 넣어주면 끝.

[kotlin] 코틀린 null 처리 (.let)

예전에 C 또는 Java로 프로그래밍을 할때, NULL 처리를 하기 위해서 if문으로 감싸거나 try catch 구문을 이용하여 NullPointerException에 대한 방어처리를 했다. 하지만 kotlin 구문 중 .let을 이용하면 조금 편하게 코드를 구현 할 수가 있다. var testStr: String? = null testStr = "null 체크" // 과거 코드 방식 if(testStr != null) { var len = testStr.length() } // 코틀린 null 처리 방법 testStr?.let{ it: String var len = it.length() }