반응형

전체 글 493

[Android] OnBackPressedCallback 사용하여 뒤로가기(Back Press) 구현하기

구현하게된 계기 회원가입 버튼 클릭 시 회원가입하는 창으로 이동하는 기능을 만들었다. Fragment -> Fragment이동 근데 휴대폰의 뒤로가기 버튼을 눌러 이전 Fragment로 되돌아 가려하면 회색 창이 나타난 뒤 그 다음 Fragment가 보인다..왜지? 또한 Logcat을 확인해보니 LoginFragment의 binding에서 NullPointerException이 발생 회색창과 앱이 죽은 이유 회색 창에 대해서는, 뒤로가기를 누르면 기존 JoinFragment만 종료되고 이 Fragment의 container역할을 한 JoinActivity(회색창)는 억지로(?) 종료되었기 때문에 아주 잠깐 보였다가 없어지는 것 같다 또한, LauncherActivity(최상단 view)가 화면에 보여지는..

📜 TIL 2023.02.17

[Android] 로그인 시 아이디 패스워드 유효성 검사하는 로직 만들기

setOnFocusChangeListener와 addTextChangedListener로 해당 기능을 구현하였다 최소요건에 대해 검사하는 로직은 id와 pw가 같기 때문에 id만 아래에 가져왔음! binding.loginIdInput.setOnFocusChangeListener(object : View.OnFocusChangeListener { override fun onFocusChange(v: View?, hasFocus: Boolean) { if (!hasFocus) { if (binding.loginIdInput.length() in 1..2) { binding.idPwWarnning.text= "ID는 최소 3자 이상입니다." } else { binding.idPwWarnning.text= ""..

📜 TIL 2023.02.15

[Android] 패스워드 아이콘이 글자가 존재할 때만 보이도록 만들기

내가 원하는 결과물 패스워드창 제일 오른쪽에 위치한 눈 모양 아이콘을 누르면 패스워드가 보인다. 해당 아이콘을 visible/invisible icon이라 부르겠다. 사용자가 패스워드를 입력했을 때에만 해당 아이콘을 보여주고 싶다. 즉, 아무런 내용을 패스워드창에 입력하지 않았을 땐 해당 아이콘이 안보이게 만들어주고 싶다. 방법 1. 우선 FrameLayout으로 패스워드창 레이아웃인 TextInputLayout을 감싸주자. 2. 그 다음 visible/invisible icon의 바로 위에 겹쳐 올려줄 네모 상자(dummyImage)를 FrameLayout안에 넣어주자. 참고: 네모 상자는 아이콘을 가리기 위한 용도이니, 당연히 패스워드 창의 배경색깔과 동일한 색으로 만들어줘야한다! 네모상자(dummy..

📜 TIL 2023.02.13

[Android] 로그인창 아이디에 적힌 글자 한번에 지우는 기능 구현하기

내가 만들고 싶은 기능 ID란에 적힌 text를 버튼 하나로 한 번에 clear하는 기능 예) 로그인 시 사용자가 id를 잘못 입력하였을 때, 버튼 한 번으로 한꺼번에 지울 수 있도록! 내가 만들고 싶은 기능의 결과물 솔루션 이 기능은 매우 간단히 구현 가능하다. TextInputLayout와 TextInputEditText를 사용하면 바로 구현이 가능하다. 위와 같이 레이아웃의 endIconMode의 속성의 clear_text를 사용하면 딱 내가 원하는 기능! 만약 텍스트를 지워주는 버튼을 자체적으로 custom하고싶다면? 위와 같이 원하는 모양의 xml파일을 drawable폴더에 넣고 endIconDrawable속성을 사용하여 적용해준다. 예) app:endIconDrawable="@drawable/..

📜 TIL 2023.02.11

[Android] Fragment에서 ViewBinding 사용법

ViewBinding해주는 이유? 화면요소(view)에 접근하여 값을 입력하거나 사용자와 상호작용하는 방식을 제어하기 위해 1. View Binding을 사용하기 위해서는 build.gradle 파일에 다음 내용을 추가해야 한다. android { buildFeatures { viewBinding true } } 2. 자동으로 생성된 FragmentLoginBinding 클래스를 사용하여 멤버변수를 선언해주자. (onCreateView 이전에 선언해주자) 이제 binding이란 이름의 멤버변수를 사용하여 위젯에 접근이 가능하다. ```kotlin class LoginFragment : Fragment() { private var _binding: FragmentLoginBinding? = null pri..

📜 TIL 2023.02.09

[Android/XML] TextView와 EditText의 높이를 똑같이 맞추고 싶을 때

☕ 문제 왼쪽은 TextView 오른쪽은 EditText로 만든 모양이다. 저 둘을 나란히 두고 싶으나.. 거슬리는 저 높낮이 차이는 뭐지? height속성을 준 것이 없는데..! 위 사진의 XML파일 ☕ 해결 간단히 아래의 속성으로 해결할 수 있다. android:baselineAligned="false" 해당 속성을 TextView와 EditText의 부모요소의 속성으로 집어넣으면 된다.

[Kotlin] 코틀린 파일 모양 다른 이유?

🎈 발단 Kotlin을 사용하여 앱을 만들고 있는 도중, 정신차려보니 아래와 같이 코틀린 파일의 모양이 다른 것을 발견했다. 모양뿐만 아니라 파일명 끝에 .kt 확장자가 붙어있고 없고의 차이마저 있었다. 보통의 경우 이와 같은 모양의 코틀린 파일이 생성된다. 이 코틀린 파일 모양은 대체 뭐지~? 라 생각하며 당황스러운 마음에 구글링부터 했는데 만족스러운 결과는 나오지 않았다. 그러던중 총 2가지의 경우로 인해 위와 같이 코틀린 파일의 모양이 다른 것을 알 수 있었다. 🎈 경우 1 코틀린 파일 내부의 코드가 전부 주석처리가 되어있는 경우 간단히 내부의 주석 처리를 풀어주면 보통의 코틀린 파일 모양 으로 변경된다. 🎈 경우 2 코틀린 파일 내부에 적힌 class명과 코틀린 파일 자체의 이름이 다른 경우 코틀..

[BT/BLE] BLE 기술에 대해 간단히 알아보자

🎈 BLE와 BT 기술적으로 BT와 BLE는 다른 것이다. BLE는 저전력을 최우선시 하는 통신기술로서 BT의 명성을 이용해 빠르게 저변을 확대한 것이다. Classic : BT기술만 지원 Smart : BLE기술만 지원 Smart ready (=원칩) : BT와 BLE기술 모두 지원 🎈 BLE 기술 2가지만 기억하자 Advertise(Broadcast) Mode Connection Mode 1️⃣ Advertise(Broadcast) Mode 자신의 존재에 대해 알리는 신호인 Advertising Packet 이 신호를 하루 종일 쏘는 것이 바로 Beacon(비콘)이다. 비콘은 상대가 수신하던 안하던 Advertising Packet 신호를 쏘기만 하면 되고 최대 50m거리까지 쏠 수 있다. 또한 한번..

📲 BT와 BLE 2022.10.30

[iOS] iOS 어플리케이션을 배포하는 4가지 방식 간단-정리

iOS개발을 완료하였다! 이제 여러 기기에서 테스트 해보고 싶다. 이럴 때 Android의 경우 단순하게 apk를 빌드해서 다른사람에게 파일로 전송해주면된다. 하지만 iOS의 경우엔 조금 다르다. ipa 자체로 설치가 불가능하기 때문이다. 방법 1️⃣ 개발용 테스트 가내수공업 빌드 그냥 컴퓨터와 휴대폰 기기를 선으로 직접적으로 연결해주고 빌드하면 된다. 일일이 기기 하나하나 꼽아가며 빌드해주어야하기 때문에 수고로움이 크다. 방법 2️⃣ 애드혹(adhoc) 애드혹 방식(over the air)은 단순하다 테스트기기의 uuid를 등록 및 배포하고 해당기기에서 테스트 하는 방식 개발완료 테스트기기의 uuid 수집 해당 uuid를 개발자 센터에 등록 빌드 후 export하여 드랍박스 등의 서버에 업로드 해당 기..

📜 TIL 2022.10.29

[Kotlin] Kotlin에서의 object 객체 표현식

🎈 객체 표현식 및 선언 때로는 새 하위 클래스를 명시적으로 선언하지 않고 일부 클래스를 약간 수정한 개체를 만들어야 하는 경우가 있습니다. Kotlin은 이를 객체 표현식(Object expressions)과 객체 선언(object declarations)으로 처리할 수 있습니다. 객체 표현 객체 표현식(Object expressions)은 익명 클래스, 즉 클래스 선언으로 명시적으로 선언되지 않은 클래스의 개체를 만듭니다. 이러한 클래스는 일회성으로 유용합니다. 처음부터 정의하거나 기존 클래스에서 상속하거나 인터페이스를 구현할 수 있습니다. 익명 클래스의 인스턴스는 이름이 아닌 식으로 정의되기 때문에 익명 개체(anonymous objects)라고도 합니다. 슈퍼타입에서 익명 객체 상속하기 일부 유형..

반응형