[안드로이드 Compose] TextField, 완료시 다음 TextField로 이동
·
안드로이드
먼저 keyboardOption에서 ImeAction.Next를 인자로 넘겨주자. OutlinedTextField( ... keyboardOptions = KeyboardOptions( keyboardType = type, imeAction = ImeAction.Next ) ... ) 처음에는 옵션만 지정해주면 되는줄 알았는데, Action도 같이 지정해줘야한다. ImeAction.Next를 지정했으므로 Next에 대한 행동을 정의해줘야한다. 먼저 FocusManager를 통해 포커싱된 TextField의 위치를 잡고, 그 아래 방향으로 포커싱을 맞춰야한다. OutlinedTextField( ... keyboardOptions = KeyboardOptions( keyboardType = type, ime..
[안드로이드] 'libuvc/libuvc_config.h' file not found 에러
·
안드로이드
이 에러에 대한 정보는 어디에도 없었다. 전세계를 뒤져봐도(구글링) 안 나오니 가능성이 두가지인데 1. 아무도 못찾은 에러를 발견 2. 아무것도 모르는 멍청한 본인을 발견 깃허브에 너무나 친절하게 cmake 하라고 되어있는데, 난 또 이걸 무시하고 혼자서 뚱땅댄 것. 삽질은 늘 그렇듯 해법은 너무나 허무하다. --- 막 클론한 libuvc를 CMakelist에 include시키고 필드하면, 저 에러가 난다. 이유는 libuvc_config.h가 없어서인데, 디렉토리를 열어보면 libuvc_config.h 말고 libuvc_config.h.in이 있다. 에러가 나든말든 깃헙 README에 되어있는대로 cmake를 통해 빌드해보자. 헤더파일이 생긴다. 기존에 존재하던 input 파일 지우고, 빌드된 conf..
[안드로이드] USB camera 연결 시, 항상 permission denied인 경우
·
안드로이드
안드로이드가 생각보다 똑똑하다. USB 장치면 다 똑같이 볼줄 알았는데, 연결되는 장치가 카메라면 카메라인줄 안다. 즉, USB 카메라의 권한을 얻으려면 USB 연결 권한을 얻기 전에 먼저 카메라 권한을 먼저 얻어내자.
[안드로이드] PreviewView가 다른 View를 overlap하는 경우
·
안드로이드
만족스럽지는 않지만.. 해결하긴 했다. xml에서 scaleType을 fitCenter로 맞추면 지정한 영역에 비율 그대로 맞춰서 들어간다. 한마디로 crop돼서 들어가는게 아니라, AspectRatio를 4:3 또는 16:9로 맞췄다면 그게 작아진채로 들어간다. 다른 view를 덮는건 해결할 수 있지만, 내가 원하는건 crop해서 넣는건데 이걸 어떻게 할 수 있을까? 도와줘 지구촌 고수들..
[안드로이드] 앱 강제 종료
·
안드로이드
앱을 구성하다보면 어느 화면에서든 바로 앱을 종료시켜야하는 경우가 있다. 처음에는 System.exit(0) 만 사용하여 구현하려했는데, 이상하게 앱이 종료됐다가 다시 시작되는 현상을 발견했다. 따라서 앱을 종료하는 시점에 존재하는 Activity를 백그라운드로 이동시키고, 종료한다. 이후 Process.killProcess 메서드를 사용하여, 앱 자체를 강제 종료시키는 방법으로 구현했다. moveTaskToBack(true); finishAndRemoveTask(); Process.killProcess(Process.myPid()); 코드의 위에서 두 줄은 Activity를 상속받은 클래스에 존재한다는 것을 놓치지 말자.
[안드로이드] getBitmap 메서드와 성능
·
안드로이드
결론은 'getBitmap 메서드를 되도록이면 사용하지 말자' 입니다. 이번에 랩실 프로젝트에서 제가 맡은 부분은 모델이 주는 bounding box를 스크린에 출력하는 것이었습니다. 모델이 얼마나 빠르게 결과를 주던, 입력과 출력 사이에 계산하는 시간이 길면 길수록 출력되는 bounding box와 사용자가 보고있는 화면의 시간차는 계속해서 늘어납니다. 미리보기 화면 -> 화면에 대한 비트맵 이미지 -> 모델 -> bounding box 그리기 위와 같은 흐름을 구성했는데, 핵심은 미리보기 화면(previewView)에서 ImageAnalyzer를 통해 얻는 화면에 대한 비트맵 이미지는 계속해서 모델이 가져가도록 하고, 나중에 출력으로 나온 bounding box와 그때 사용자가 보고있었던 화면을 시간..
[안드로이드] ViewBinding 사용해보기
·
안드로이드
기존에는 특정 뷰의 요소들을 가져오기 위해 findViewId 메서드를 사용했습니다. ViewBinding은 이를 해결해줄 수 있습니다. 먼저 build.gradle(Module)에 다음과 같이 적어줍니다. android { ... buildFeatures { viewBinding = true } } 이후 gradle을 sync 시켜줍니다. sync가 됐다면, 기존에 화면을 띄워주던 onCreate메서드를 다시 작성해주어야 합니다. 우선 lateinit으로 binding 변수를 생성해줍니다. 이후 onCreate 메서드에서 inflate메서드를 통해 binding에 뷰를 할당해줍니다. class MainActivity : AppCompatActivity() { lateinit var binding: Ac..
[안드로이드] RecyclerView 사용 및 클릭 이벤트 넣어보기
·
안드로이드
RecyclerView는 이미지나 텍스트를 리스트화하고, 스크롤하며 볼 수 있게 해주는 컨테이너입니다. 이번에 RecyclerView를 사용하여, 리스트에 있는 문자열을 보여주는 앱을 만들어보겠습니다. 먼저 메인 화면에 RecyclerView를 추가한 후, id를 recyclerView로 해주겠습니다. 다음으로 문자열 리스트를 받는 RecyclerView의 Adapter를 만들어주어야합니다. RVAdapter.kt를 만들어 주고 인자로 문자열 리스트를 받게하겠습니다. RVAdapter는 RVAdapter의 viewHolder를 타입으로 갖는 Adapter를 반환해야합니다. 하지만 viewHolder는 직접 inner 클래스로 만들어주어야합니다. viewHolder에 문자열 리스트의 원소를 하나하나 다른 ..
[안드로이드] 뒤로 가기 두 번 누르면 종료되게 만들기
·
안드로이드
뒤로가기를 누르면 발생시킬 동작들은 onBackPress 메서드에 있습니다. 따라서 먼저 이를 override 시켜주겠습니다. onCreate 메서드와 동일한 스코프에 정의해야함을 주의하세요. package com.example.listview_ex import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ... } override ..
[안드로이드] ListView 구현하기
·
안드로이드
ListView는 MainActivity에서 Adapter에게 정보를 전달하고, Apdater가 ListView에 요소들을 넣어주는 흐름을 가집니다. 먼저 간단히 ListView를 표시할 화면을 구성하겠습니다. 그리고 ListView에 들어갈 요소들의 레이아웃을 구성해주겠습니다. ListView에 들어갈 ListViewItem은 다음과 같이 화면에 보여질 예정입니다. ListViewItem에 들어갈 데이터 형식을 만들어주기 위해 data class인 ListViewItemModel.kt를 만들어 주겠습니다. package com.example.listview_ex data class ListViewItemModel ( var title : String = "", var description : Strin..