목록분류 전체보기 (105)
우찬쓰 개발블로그
예시) 기존 자바 9가 설치되어 있는 환경에서 자바 8을 추가로 설치하고, 자바 8로 기본 세팅 변경 터미널에서 sudo vi ~/.bash_profile export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) // 1.8로 변경 를 추가 한뒤 다시 터미널에서 source ~/.bash_profile 그다음 자바가 제대로 버전이 반영되었는지 확인한다. java -version
보통 enum class로부터 정의된 값을 찾는다. enum class Test(val value: Int){ A(0), B(1), C(2) } 그런데 0으로 부터 A라는 enum을 찾으려면 어떻게 해야할까? 이를 위해서는 새롭게 fun을 만들어야 한다. object FindTestByValue { private val map = Test.values().associateBy(Test::value) fun fromValue(value: Int) = map[value] } 이렇게 funtion을 구성한 뒤에 fromValue를 호출해서 쓰면 된다. FindTestByValue.fromValue(0) // Test.A가 리턴됨
디자인에 따라서, 성능상 안좋지만 NestedScrollView안에 RecyclerView를 wrap_content로 넣어야 할때가 있다. 이 경우, RecyclerView의 아이템 갱신시 RecyclerView로 포커스가 자동으로 이동하면서 스크롤 되는 경우가 있다. 이럴때는 NestedScrollView의 바로 자식인 layout에 android:descendantFocusability="blocksDescendants" 를 넣어주도록 하자.
String video_id = "ALZHF5UqnU4"; //You can get the video also in OnVideoId() listener String fullsize_path_img = "https://img.youtube.com/vi/"+video_id+"/0.jpg"; String firstThumb_path_img = "https://img.youtube.com/vi/"+video_id+"/1.jpg"; String secondThumb_path_img = "https://img.youtube.com/vi/"+video_id+"/2.jpg"; String thirdThumb_path_img = "https://img.youtube.com/vi/"+video_id+"/3.jpg";
안드로이드 스튜디오로 넘어오면서, 보통 라이브러리들이 다 aar파일(Manifest가 포함된 안드로이드 전용 라이브러리) 로 제공되지만, 옛날 이클립스 시절에는 java파일만 포함된 jar파일로 라이브러리가 만들어 졌었다. 예전의 jar 라이브러리들도 잘 만들어진 것들은 아직도 쓰는 경우가 많은데, 간단하게 프로젝트에 추가해보자. 1. 먼저 project의 보기 방식을 project로 바꾸고, 혹은 직접 폴더로 가서 app/libs 에 jar파일을 넣는다. 2. app수준의 gradle에 다음과 같이 추가한다. dependencies { ... implementation files('libs/YourJarFile.jar') ... } 3. 그리고 sync를 돌려주면 바로 사용이 가능하다.
앱 개발을 하다보면 GPS를 사용하여 위경도 값을 얻어와야 하는 경우가 있다. GPS 위치 모드 설정에 따라서 GPS의 측정정확도가 다른데 기본적으로 측정정확도는 디폴트가 '기기전용'으로 되어있다. 안드로이드 설정에서 위치 모드로 들어가면 세가지 종류가 있는데, 그 세가지는 다음과 같다. 높은 정확성(GPS, Wifi, 블루투스, 이동통신망) 배터리 절약(Wifi, 블루투스, 이동통신망) 기기 전용(GPS만 이용) 당연히 GPS 값을 가장 잘 얻어오는 모드는 높은 정확성 이다. 그래서 앱에서 GPS 값을 잘 가져오기 위해서는 높은 정확성으로 바꿔주는 것이 중요한데, 이게 생각보다 샘플코드를 찾기가 어려웠다. 결론적으로는 아래와 같은 코드를 짜게 되었다. 먼저 gradle에 라이브러리를 추가해주어야한다. ..
안드로이드 개발을 하다보면, 알림이나 푸시등이 왔을때 화면이 꺼져있어도 켜주어야 하는 상황이 생긴다. 이 경우는 어떻게 해야할까? 검색해보면 다양한 방법이 있지만, 가장 짧은 소스는 다음과 같다. val pm = getSystemService(POWER_SERVICE) as PowerManager val wLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.ON_AFTER_RELEASE, "myapp:TAG") wLock.acquire()
공공데이터 날씨 API를 연동하다보니 gps데이터 및 주소 데이터를 가져와야 하는 일이 생겼다. 관련 자료를 찾아보니 너무 다들 복잡하게 코드를 짜고 있어서 직접 GpsManager를 하나 만들어 보게 되었다. 먼저 유의해야할 점은, 안드로이드는 보통 Gps와 Wifi로 부터 위치 정보를 받아오는데, 안드로이드 기본 설정에서 위치 가져오기 모드가 Gps로만 되어있다면 네트워크로 부터 위치정보를 받아올수가 없다. 그래서 이 부분은 꼭 네트워크과 gps 둘 다로부터 위치정보를 가져오게 바꾸도록 하자. 그다음 GpsManager 소스이다. /** * Created by WoochanLee on 2019-06-26. */ class GpsManager(val context: Context) { var locat..
비밀번호 변경 등의 기능을 구현하다보면 패스워드 입력시의 가려지는 문자에도 디자인이 들어가는 경우가 있다. 이런 경우에는 어떻게 바꾸어주어야 할까? 간단히 예제로 해당 동그라미 문자를 #으로 바꾸어 보자 먼저 CharSequence 클래스를 상속받는다. class CustomCharSequence(private val source: CharSequence): CharSequence { override val length: Int get() = source.length override fun get(index: Int): Char { return '#' } override fun subSequence(startIndex: Int, endIndex: Int): CharSequence { return sour..
spinner를 누르게되면 기본적으로 navigation bar가 튀어나오게 되어있다. 하지만 fullscreen으로 작업해야 되는 작업자 입장에선 곤혹이다. 이럴경우 어떻게 해주면 될까? stack over flow에선 다 너무 복잡하고, 제대로 되지 않는 방법만을 알려주기에, 포스팅한다. spinner에서 사용하는 ArrayAdapter에서 getDropDownView를 override하여 다음과 같이 처리한다. override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup?): View { //hideNavigationBar return super.getDropDownView(position, convertView,..