일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 레트로핏
- coroutine
- build
- viewpager
- ADB
- Gradle
- RecyclerView
- WebView
- 코틀린
- 안드로이드
- error
- image
- 깃헙
- Github
- 안드로이드 스튜디오
- DI
- Android
- GIT
- Retrofit
- studio
- 스튜디오
- MVVM
- 다트
- 에러
- 안스
- 안드로이드스튜디오
- dart
- Kotlin
- 의존성주입
- 웹뷰
- Today
- Total
목록전체 글 (159)
코딩하는 일용직 노동자
아래 주소에서 쉽게 Dart문법을 이용해서 실행시켜볼 수 있다. https://dartpad.dartlang.org/ DartPad dartpad.dartlang.org 1.자료형 타입추론 방식을 사용한다. var a = 10; 이렇게 써도 되고 int a = 10; 이렇게 써도 된다. dynamic b = 10; 이런 문법도 있다. myFunc(dynamic param) { print('$param') } 이렇게 파라메터를 dynamic 타입으로 받게 된다면 myFunc(10); myFunc('Hello'); 를 넣어도 다 된다. 마치 자바의 제너릭과 비슷하다. num c = 10.1; 또한 숫자형을 모두 포함하는 num 이라는 자료형도 존재한다. 이것은 int 형이든 double 형이든 숫자형을 모두..
공지사항을 표시할 팝업을 만들려고 합니다. Dialog 안에는 뷰페이저가 있고 아이템으로는 ImageView 하나만 있는 Fragment 를 갖고 있습니다. ImageView의 height를 wrap_content로 설정하고 adjustBoundView = true로 설정했습니다. 하지만 뷰페이저의 height를 wrap_content로 설정을 해도 실제 구동시 match_parent로 표시되는 문제가 있습니다. 이를 해결하려면 ViewPager를 상속받은 CustomViewPager를 만들어서 onMeasure를 오버라이딩 해줘야 합니다. /** * 설명 : 일반적인 ViewPager 는 height 값이 화면 전체를 갖는다. * wrap_content 만큼만 갖게 하기 위해 onMeasure 를 오버..
최근 업데이트 후 멀쩡하던 new ViewModelProvider(this).get(MyAndroidViewModel.class) 에서 Cannot create an instance of class 에러가 발생했습니다. java.lang.RuntimeException: Cannot create an instance of class my.custom.viewmodel.CustomViewModel at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:202) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:135) at an..
라운드된 배경에 알맞게 view를 잘려 보이도록 처리하는 방법입니다. 흰색 라운드 배경위에 RecyclerView 를 배치했는데 배경의 라운드와 딱맞게 이미지가 가려져 보이도록 처리했습니다. https://youtu.be/d1BPxyT_Iog 실제 구현 영상 import android.content.Context; import android.graphics.Canvas; import android.graphics.Path; import android.graphics.RectF; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; /**..
유튜브를 웹뷰로 보여주도록 처리를 했는데 사이드 이펙트가 있었습니다. 전체화면 모드로 이동 후 복귀하면 웹뷰에 보여지는 화면 UI가 너무 이상하게 나오는겁니다. 또한 전체화면 모드에서 가로모드로 플레이가 되지 않습니다. 첨부된 소스를 이용하면 전체화면 모드시 가로모드로 전환해서 플레이가 됩니다. 또한 Back key 를 눌러 복귀해도 UI 상에 문제도 발생하지 않습니다. private fun setWebViewYoutube(wvYoutube: WebView, movieId: String) { wvYoutube.settings.apply { javaScriptEnabled = true setAppCacheEnabled(true) pluginState = WebSettings.PluginState.ON } ..
유튜브에서 url을 공유할때 보면 www.youtu.be/nA8PosPb70c 이런식으로 url 이 클립보드에 복사됩니다. 이걸 웹뷰에서 열면 영상 뿐만 아니라 좋아요 버튼같은 유튜브의 다른 불필요한 UI도 화면에 표시됩니다. 웹뷰에 유튜브 영상 알맹이만 꽉차게 표시하고 싶으면 웹뷰에 www.youtube.com/embed/영상아이디 이렇게 하면 됩니다. 영상아이디는 유튜브 공유 URL 의 가장 마지막 / 뒤에 영문+숫자가 아이디입니다. www.youtube.com/embed/nA8PosPb70c 이렇게 호출시키니깐 웹뷰 화면에 영상이 꽉 차게 표시 됩니다. ^^ wvYoutube.settings.apply { javaScriptEnabled = true setAppCacheEnabled(true) pl..
Github 에서 5월6일 새로운 협업도구 베타버전을 발표했습니다. - Github Codespaces - Github Discussion - Github Code Scanning - Github Secret Scanning - Github Private Instance #Github Codespaces www.github.com/features/codespaces 코드스페이스는 온라인 개발환경으로 브라우저 기반의 코드 에디터를 제공합니다. 브라우저에서 쉽게 깃허브 코드를 코딩, 빌드, 테스트, 디버그 및 배포할 수 있습니다. UI 디자인을 보면 Visual Studio Code 와 굉장히 유사한것을 알 수 있습니다. VS Code extensions 을 이용해서 개발도 할 수 있는것 같습니다. MS가 ..
전체화면 사이즈의 Dialog 로 만들어진 화면이 있습니다. 메인화면에서 이동되는 서브화면이 모두 Dialog 로 만들어진 화면입니다. 그리고 이 화면은 웹뷰가 전체화면 사이즈로 배치되어 있습니다. 실행해보면 웹뷰로된 액티비티와 별반 다를게 없는 서브화면입니다. 이 화면이 키보드가 올라와있는 상태에서 웹의 팝업이 뜨게되면 키보드가 내려가면서 해당 부분이 제대로 그려지지 않아 하얗게 보이는 현상이 발생했습니다. 버튼 클릭시 키보드가 내려가는 시간과 팝업이 보이는 시간이 같아서 발생하는듯 합니다. 처음에는 팝업이 보이는 타이밍을 0.2~0.3초 정도 딜레이를 주면 되지 않을까 했는데... 문제는 로그인 화면뿐만 아니라 텍스트입력창이 있는 다른 여러 서브화면에서 똑같은 현상이 있기때문에 모든 화면의 팝업들에 ..
Android 10(Q) 부터는 기존의 저장공간과는 다른 개념으로 바뀌었습니다. 10 이전의 안드로이드는 기본적으로 내부저장공간과 외부저장공간으로 나뉩니다. # Android 10(Q) 이전의 Storage 내부저장공간은 샌드박스 형식으로 보호되는 공간을 할당받습니다. ex) com.kakao.talk, com.kakao.story, com.app.a 그리고 각 앱은 자신의 저장공간만 접근하고 사용할 수 있습니다. 10 에서도 내부저장공간은 마찬가지로 사용됩니다. 반면 외부저장공간은 하나의 큰 공통저장공간으로 운영되었습니다. READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE 권한만 있으면 어떤앱이 작성한 파일이든, 어느 경로에 있든, 어떤 파일이든 모두 접근/수정할 수 있었..
let 객체의 null 체크에 주로 사용. val userName: String? = "" userName?.let { println("userName : $userName") } apply 객체의 생성과 동시에 값을 초기화 할때 주로 사용. val textView = TextView(this).apply { text = "Hello World!!" setOnClickListener{} } run 이미 생성된 객체를 재접근해서 값을 셋팅할때 주로 사용. textView.run { text = "안녕하세요" setOnClickListener{} } with View 에 접근할때 주로 사용. fun ViewHolder.onBindViewHolder() { with(binding){ adapter = this..