일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cyclic imports
- Java
- 딕셔너리 복사
- 뷰크기
- Kotlin
- 버튼크기
- 1073741571
- View.GONE
- python #circular imports #
- 자바
- 안드로이드 스튜디오
- 이미지크기
- setVisibility
- 코틀린
- 0xC00000FD
- 파이썬 문법
- Today
- Total
목록Mobile/Kotlin (9)
개발여행

한 때 코틀린과 플러터를 같이 깨작거리며 공부해보던 적이 있었다. 코틀린은 비즈니스 코드(.kt)와 UI파일(.xml)이 분리되어 있어 UI는 UI대로, 코드는 코드대로 따로 설정할 수 있어서 간편하고, 플러터는 하나의 파일에서 UI와 코드를 모두 작성해야해서 이게 도대체 무슨 코드지라고 생각하며 코틀린이 낫다고 생각했었다. 그런데 프로젝트 규모가 점점 커지고 최근 들어 리액트도 접해보면서 어쩌면 한 파일에서 관리하는게 편할 수도 있겠다는 생각이 들고있었다. (xml 왔다갔다하기 넘 귀찮..) 그러던중 요즘 새로운 프로젝트를 시작하게 되면서 다시 기초를 훑어보고 있었는데 코틀린에서 Jetpack Compose라는 라이브러리로 리액트나 플러터처럼 한 파일에서 UI와 코드를 작성할 수 있다는 것을 알게됐다...

사용자에게 시간을 입력받아야 하는데 기본 timePickerDialog는 너무 안이뻐서 커스텀으로 만들어서 사용하려 했다. 그런데 웬걸, 시간이 안뜨네? themes.xml에서 속성도 변경해보고 별 짓을 다했는데 안보인다.. 돌고 돌아 지피티에게 물어보니 spinner 모드일 때는 스타일 지정을 해도 몇가지 속성은 적용되지 않는다고 한다 (ㅡㅡ) 불현듯 생각해보니 스피너모드에서는 드래그해서 시간을 선택할 수도 있지만 터치하면 수정할 수 있도록 editText 형식으로 구현되어 있다. 그리고 스쳐지나가는 또하나의 생각.. 앱 전체에 폰트를 적용하기 위해서 customViewFontStyle을 지정해놨었다. 에딧텍스트에 색을 지정해주니 타임피커의 글씨색이 변경되었다 또 예상치 못한곳에서 삽질을 했는데 검색해..
val r: Resources = resources var width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80F, r.displayMetrics).toInt() var height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90F, r.displayMetrics).toInt() binding.btn1.updateLayoutParams { width = width height = height } 위와 같은 방법으로 xml이 아닌 엑티비티(또는 프래그먼트) 코드 내에서 위젯의 크기를 조절할 수 있다. 상단의 width, height 선언없이 곧바로 Int 값을 넣어줘도 작동은 하지만 ..

사진처럼 메인 스크롤뷰 안에 리사이클러뷰(이하 RV)를 사용하여 앱을 제작하던 중 문제가 발생했다. (실제로는 RV만 있는게 아닌 다른 위젯들도 있었으나 간략히 표시하였음) RV에 모든 내용이 스크롤 없이 표시되길 바랐으나 height 설정을 아무리 만져보아도 수치를 직접 지정하지 않는 이상 내용이 잘린 상태로 스크롤이 사용되었다. 위 사진처럼 RV의 모든 내용을 표시하고 싶을 경우 가장 바깥의 뷰를 일반 ScroolView가 아닌 NestedScrollView를 사용하면 된다.

리사이클러뷰에서 visibility = View.GONE 속성을 사용해서 뷰 내용을 숨기려고 했지만 마음대로 되지 않았다. 위의 예시처럼 view1를 숨겼을 경우 오른쪽 그림처럼 2,3,4만 보여야 하는데 왼쪽처럼 1의 내용은 사라진채 공간만 그대로 차지하고 있었다. 당최 문제가 고쳐지지 않아서 검색하고 이것저것 고쳐보기를 세시간 동안이나 했다.. 젠장 정확히는 잘 모르겠지만 안드로이드의 버그라고 한다. 스택 오버 플로우의 댓글에서 알게 되었는데 애초에 답글이 햇수로 9년전 글이라서 이건 아니겠지.. 하고 넘겼던게 오랫동안 삽질을 한 원인이다 https://stackoverflow.com/questions/12302172/setvisibilitygone-view-becomes-invisible-but-s..
우선 res디렉토리에 anim 폴더를 만들고 다음과 같이 xml를 작성한다. [enter_from_right.xml] [exit_to_right.xml] 메인 엑티비티에 다음과 같이 setFrag 함수를 작성한다. fun setFrag(fragment: Fragment) { val transaction = supportFragmentManager.beginTransaction() transaction.setCustomAnimations(R.anim.enter_from_right, 0, 0, R.anim.exit_to_right) transaction.add(R.id.main_frame, fragment).addToBackStack(null) //transaction.setCustomAnimations(R..
메인 엑티비티에 다음과 같이 setFrag()함수를 작성하고 onBackPressed 함수를 override한다. fun setFrag(fragment: Fragment) { val fm = supportFragmentManager val transaction = fm.beginTransaction() transaction.add(R.id.main_frame, fragment).addToBackStack(null) transaction.commit() override fun onBackPressed() { val fm = supportFragmentManager val count = fm.backStackEntryCount if (count > 0) super.onBackPressed() else { i..
지난번 포스팅에서 프래그먼트 전환에 관하여 작성하였다. https://ti-tan.tistory.com/22 Kotlin 프래그먼트 전환 MainActivity와 FragmentA, FragmentB가 있다고 가정하자. 만들려는 어플리케이션은 MainActivity위에 FragmentA와 FragmentB (이하 A와 B) 둘중 하나의 프래그먼트를 보여준다. 이때 A에서 B로 프래그먼트 전환하.. ti-tan.tistory.com 이번 포스팅에서는 프래그먼트 전환시 데이터를 전달하는 방법을 알아본다. MainActivity에 다음과 같이 setFrag 함수를 작성한다. fun setFrag(fragment: Fragment, argment1:String) { val bundle = Bundle() bun..