본문 바로가기

Kotlin12

[Android/kotlin] LayoutInflater 사용 (PopupWindow) 오늘은 LayoutInflater를 사용해서 PopupWindow를 만들어보겠습니다 팝업창을 만들고 사용자가 만든 레이아웃을 설정할 수 있고, 현재 Activity 최상단에 띄워집니다 그럼 PopupWindow를 간단하게 사용해보고 특징들에 대해 정리해보도록 하겠습니다 1. PopupWindow에 띄울 Layout 설정 간단한 예제로 아래 그림과 같은 TextView 1개, Button 2개로 구성된 레이아웃을 만들어보겠습니다 [text_popup.xml] 2. xml을 view로 만들어줍니다 xml과 view를 만들어주기 위해선 LayoutInflate를 알아야합니다 여기서 LayoutInflate란 xml에 선언된 위젯들을 실제 View로 만들어주는 역할을 합니다. var linear = Linear.. 2020. 12. 22.
WindowManager$BadTokenException Fatal Exception : android.view.WindowManager$BadTokenException Unable to add window — token android.view.VoewRootImpl@ is not valid; is your activity running? 이 에러가 지속해서 발생했는데 Firebase Crashlytics 에서 🔔 창 추가 불가 - 토큰이 올바르지 않음, 활동 실행 여부 확인 필요 이 비정상 종료는 대개 앱에서 이전에 완료된 활동을 컨텍스트로 사용하여 대화상자를 표시하려고 시도하여 발생합니다. 예를 들어 활동이 종료되면 대화상자를 표시하려고 시도하는 AsyncTask를 트리거하지만 사용자가 작업이 완료되기 전에 활동에서 뒤로 이동하면 발생할 수 있습니다. 비정.. 2020. 12. 15.
[Java / Kotlin] 얕은 복사 , 깊은 복사 객체의 복사를 크게 두 가지 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) 나눌 수가 있습니다. 혼동하여 사용할 경우 결과값이 달라지므로 차이를 알고 사용해야 합니다. 1. 얕은 복사 (Shallow Copy) 객체 복사 시 해당 객체의 주소값을 복사 얕은 복사의 경우, 주소값을 복사하기 때문에 객체 복사 후 변수를 변경하거나 삭제하면 기존 객체의 변수값에도 변화가 생긴다. 예시 배열에 들어간 값을 삭제하는지 테스트해보겠습니다 ✔ Java ArrayList origin = new ArrayList(); origin.add("AAA"); origin.add("BBB"); ArrayList swallowCopy = new ArrayList(); swallowCopy = origin; s.. 2020. 12. 2.
[Android/kotlin] 시스템 폰트 크기에 영향받지 않게 하기 font size DP 선언 이전 포스팅에서도 정리한 적이 있지만 dp는 물리적인 디스플레이 해상도에 영향을 받지 않기 때문에 해상도에 따라 맞춰주지 않아도 된다. 반면, sp의 경우는 dp와 유사하지만 물리적인 디스플레이 해상도에 영향을 받는다. 그렇기 때문에 해상도에 영향을 받지 않으려면 dp로 TextSize를 정해주면 된다 (Galaxy S8 기준) 안드로이드 설정-> 디스플레이 -> 글자 크기와 스타일에 들어가면 글자 크기를 조절할 수 있는데, 부끄럽게도 이번에 처음 확인을 해보았다. 결과는 대참사가 일어났다. UI는 뒤죽박죽이 되었고, 심지어 잘려서 보이지 않는 텍스트가 발생했다. 부랴부랴 TextSize를 dp로 변경했지만, 내가 놓친 부분이 2개나 있었다. TextView가 programm.. 2020. 7. 27.