본문 바로가기
개발노트

4주차 2일 안드로이드 입문

by 시계속세상은아직돌아가는중 2023. 8. 1.

위젯 : 앱 화면을 구성하는 시각적인 모양을 지닌 UI요소

레이아웃 ViewGroup의 서브 클래스로서, 다른 뷰(위젯 혹은 레이아웃)를 포함하면서 이들을 정렬하는 기능을 지닌 UI요소. 위젯은 레이아웃 안에 설계하게됨

 

View는 모든 UI컴포넌트의 부모 클래스

view클라스의 모든 속성은 모든 UI컴포넌트에 사용 가능

 

id: UI컴포넌트를 고유하게 식별하는 식별자. 위젯을 구분하는 식별값이며 중복될 수 없음

모든 view widthheight를 지정해줘야함

This view is not constrained vertically: at runtime it will jump to the top unless you add a vertical constraint

해당 오류 발생 : EditText

 오류해결 방법 : 해당 위젯에 Constraint를 주면 됨

제약은 최소 세 개를 줘야 오류가 나지 않음

 

레이아웃의 종류

01.  Linear Layout <자주쓰임. 중첩 안됨

02.  Relative Layout <자주쓰임. 중첩이 됨

03.  Table Layout

04.  Frame Layout //플러터의 스택과 같은 형태. 겹겹이 쌓임

05.  Constraint Layout <요즘 디폴트 값으로 쓰임

 

Margin : 다른 뷰와의 간격

Padding : 안쪽으로 간격을 주는 것

Gravity : 정렬의 방식. GravityLayoutGravity로 설정 가능.

 

Activity

 

앱을 실행하고 난 뒤의 화면

 

이 일련의 것들을 이해하기 위해서는 결국엔 실습만이 정답이었다.

https://github.com/S4U2M/Assignments/tree/master/Android_Beginner_Assignment

의 과제 진행사항이다.

 

현재 구현 완료사항 : 로그인 기능 및 회원가입기능

앞으로 구현해야할 사항 : 프로필 액티비티

레이아웃

레이아웃을 구현하면서 느낀점은, 이러한 관계로 묶어 두는 것도 좋지만, 각각의 TextView와 EditText를 LinearLayout으로 구성했으면 좋았지 않았을까 싶다. 일정한 간격으로 마진을 주는 과정에서 여러번 오류가 발생해서 미세하게 마진이 틀리다. 이 부분은 보완해야할 것 이다.

 

 

액티비티를 통한 구현사항

로그인을 하면 성공적으로 로그인이 되었음을 토스트로 알려준다.

 

이는 저번주 팀 과제에서 사용했던 로그인 기능을 그대로 응용하였으며 내가 구현한 부분이다 보니 보다 스무스하게 만들어졌다

로그인 버튼에는 onClick을 줘서 함수로 빼왔다.

모든 기능을 위에서 구현하면 너무나도 난잡해지기 때문.

 

여기서 눈여겨 봐야할 것은 

val id = findViewById<EditText>(R.id.id_Edit)
val psw = findViewById<EditText>(R.id.psw_Edit)

val inputId = id.text.toString()
val inputPsw = psw.text.toString()

이 부분이다. 안드로이드 입문하면서 처음 접한 개념으로

 

id와 psw로 해당 부분의 위젯인 EditText에 입력된 값을 otStirng() 즉 스트링 값으로 받는 변수 둘을

userFindInfo라는 변수를 통해 find를 활용해 판단한다.

 

만약 해당 값이 null이라면 아이디 혹은 비밀번호 아니면 둘 다 일치하는 객체가 없으며, id와 비밀번호 둘 다 같은 요소를 가진 객체 userList 속 User객체를 가져오는 형식이므로 로그인이 성립된다.

 

data class User(var id:String, var password:String, var name:String)

object UserManager {

    var userList:ArrayList<User> = ArrayList()

    init {
        userList.add(User("test","test","테스트중"))
    }
}

해당 data class를 사용해 user객체를 손쉽게 탄생시키며

 

userList를 object 형식에 넣어, 클래스처럼 호출하지 않고 호출하더라도 해당 펑션이 종료되면 같이 종료되었던 때와 달리, 오직 이 오브젝트에만 접근하여 즉각적으로 사용되어 값을 넣는 것이 가능해졌다.

 

처음에는 class의 형태로 고안하였으나, 하나의 액티비티가 아닌 두 개 이상의 액티비티에 관여해야 하는 userInfo를 어떻게 다뤄야할까의 고민 및 서치 끝에 나온 형태이다.

 

회원 가입 화면이다.

 

공백이 생기면 공백이 있음을 Toast로 알려주고, 공백인 부분을 붉은 색으로 바꿔준다.

이는

공백을 채운뒤 버튼을 누르면 공백이 사라지도록 만들었다.

 

해당 화면에서 버튼이 없는 것 처럼 느껴지지만, 해당 이미지는 이미지 버튼이다. 배경이 회색을 회색으로 가지는 이슈가 있어 백색으로 해둔 상태다.

 

또한 중복된 아이디 생성 시 ID부분을 붉은색으로 표시해주는 기능 또한 넣었다. 이를 구현하기 위해 Changingcolors라는 펑션을 따로 만들었으며, 

 

해당 부분이 공백인가의 여부로 판단하여 해당 기능이 작동한다.

 

참고 블로그

https://lalalait.tistory.com/2

 

안드로이드 이미지 버튼 배경 투명/이미지 크기 조정

안드로이드 이미지 버튼 배경 투명/이미지 크기 조정 안드로이드에서 이미지 버튼을 사용할 때 배경이 투명인 이미지로 이미지 버튼을 설정했지만 기존의 회색 버튼으로 배경이 바뀌는 것을 볼

lalalait.tistory.com

https://ytlive.tistory.com/47

 

Android Studio EditText이 비어있는지 확인하기

안드로이드 프로그래밍을 하다보면 EditText를 많이 사용한다. 이 때 EditText에 아무것도 작성하지 않은 경우 이를 확인하고 예외처리를 해줘야 하는 경우가 있다. 예외처리 코드는 다음과 같다. if(

ytlive.tistory.com

https://aries574.tistory.com/283

 

[안드로이드] 코드(MainActivity) 에서 배경색상 바꾸는 다양한 방법

이번 시간에는 코드에서 레이아웃이나 텍스트뷰들의 배경 색상을 바꾸는 다양한 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 구성 activity_main.xml 3. 메인 코드 구현 MainActivity.java 1. 실

aries574.tistory.com