Android_02

김재현·2023년 3월 30일
0

안드로이드

목록 보기
2/12

프로젝트 폴더 구성

AndroidManifest.xml<application> : 앱 전체를 대상으로 하는 설정
icon속성 : 이곳에 지정한 이미지가 앱을 설치한 사용자의 폰에 보이는 실행 아이콘(XML 속성값이 @로 시작하면 리소스를 의미)
label속성 : 앱의 이름을 등록
theme설정: 앱에 적용해야 하는 테마를 설정

  • 안드로이드 컴포넌트는 시스템에서 생명주기를 관리한다. 그리고 시스템은 매니페스트 파일에 있는 대로 앱을 실행한다. 결국 컴포넌트는 매니페스트 파일에 등록해야 시스템이 인지한다.

activity, service receiver, provider 태그를 통해 등록한다. 컴포넌트 하나당 태그 하나로 등록하며 만약 액티비티가 10개라면 <activity>를 10개 선언해야 한다.

res폴더 하위에 파일을 만들게 되면 R.java에 자동으로 올라가고 식별자가 부여된다. 따라서 규칙이 몇 개 생긴다

  • res 하위의 폴더명은 지정된 폴더명을 사용해야 한다.
  • 각 리소스 폴더에 다시 하위 폴더를 정의할 수는 없다.
  • 리소스 파일명은 자바의 이름 규칙을 위배할 수 없다.
  • 리소스 파일명에는 알파벳 대문자를 이용할 수 없다.

kotlin 언어

주요하게 짚고 넘어가야 할점들

  • lateinit은 var 키워드로 선언한 변수에만 사용할 수 있다.
  • lateinit은 Int, Long, Double, Float, Boolean, Byte 타입에는 사용할 수 없다.
  • Any는 모든 타입이 가능하다(최상위 클래스)
  • Unit은 반환문이 없는 함수이다. Unit 타입으로 선언한 변수에는 Unit 객체만 대입할 수 있다. 따라서 Unit 타입으로 변수를 선언할 수는 있지만 의미가 없다.
  • Nothing은 null이나 예외를 반환하는 함수이다.
  • 함수의 매개변수(파라미터)에는 var나 val 키워드를 사용할 수 없다. val이 자동으로 적용되며 함수 안에서 매개변수값을 변경할 수 없다.
  • if-else는 표현식으로도 사용할 수 잇다. 표현식이란 결괏값을 반환하는 계산식을 말한다. 그때는 else를 빼먹을 수 없다.
  • when은 데이터를 명시하지 않고 조건만 명시할 수도 있다. 또한 when은 if-else와 같이 표현식으로도 사용할 수 있다.
  • 클래스의 주 생성자를 선언하지 않으면 컴파일러가 매개변수가 없는 주 생성자를 자동으로 추가한다.
  • 생성자의 매개변수는 지역 변수이므로 다른 함수에서는 사용할 수 없다. 클래스의 멤버 함수에서 생성자의 매개변수를 이용할때는 클래스의 멤버 변수를 선언하고 주 생성자의 본문인 init 영역에서 매개변숫값을 클래스의 멤버 변수에 대입해준다. -> 주생성자에서 매개변수를 val, var로 선언하면 바로 클래스의 멤버 변수가 된다.
  • 주 생성자와, 보조 생성자를 같이 쓸 경우에 보조 생성자에서 주 생성자를 호출해주어야 한다.
  • 상속 받을 때 매개변수가 있는 상위 클래스의 생성자를 호출할 때는 매개변수 구성에 맞게 인자를 전달해야한다.
  • 데이터 클래스의 경우 equals()함수는 주 생성자에 선언한 멤버 변수의 데이터만 비교대상으로 삼는다.
  • 함수타입으로 람다 함수 앞에 (Int) -> Unit이 매개변수가 1개인 람다 함수임을 알려준다.

6-1. 화면을 구성하는 방법

화면을 출력하는 컴포넌트는 액티비티뿐이다. 결국 앱에서 화면을 출력하고 싶다면 액티비티를 만들어야 하고 이렇게 만든 액티비티에서 출력한 내용이 기기의 화면에 보인다.

화면에 내용을 표시하려면 뷰(View) 클래스를 이용해 구성해야 한다.
TextView 클래스, ImageView 클래스 등을 이용한다.

화면 구성법
1. 액티비티 코드로 작성하는 방법
2. 레이아웃 XML 파일로 작성하는 방법(보통 XML에 씀)

뷰 객체의 계층 구조

  • View: 모든 뷰 클래스의 최상위 클래스. 액티비티는 View의 서브 클래스만 화면에 출력한다.
  • ViewGroup: View의 하위 클래스지만 자체 UI는 없어서 화면에 출력해도 아무것도 나오지 않는다. 다른 뷰 여러 개를 묶어서 제어할 목적으로 사용한다. 일종의 그릇 역할을 하는 클래스로, 일반적으로 컨테이너 기능을 담당한다고 이야기 한다. 실제로는 ViewGroup의 서브 클래스인 레이아웃 클래스를 사용한다.
  • TextView: 특정 UI를 출력할 목적으로 사용하는 클래스, 문자열을 출력하는 뷰이다. TextView 이외에도 다양한 클래스가 있다.

레이아웃 XML의 뷰를 코드에서 사용하기다음과 같이 XML 속성값이 @로 시작하면 R.java파일을 의미하는데 text1이라는 아이디를 추가해주라는 뜻이다. 그렇게 되면 R.java파일의 상수 변수로 객체를 얻을 수 잇다. 이때 findViewById()함수를 이용한다.

뷰의 크기를 지정하는 방법

margin : 뷰와 뷰 사이의 간격
padding: 뷰의 콘텐츠와 테두리 사이의 간격
visibility : 뷰가 화면에 출력
invisible: 뷰가 화면에 보이지 않지만 자리는 차지한다
gone: 뷰가 화면에 안보이고 자리도 차지하지 않는다.


6-3. 기본적인 뷰 살펴보기

텍스트 뷰

android:text 속성
TextView에 출력할 문자열을 지정한다. android:text="helloworld"처럼 문자열을 대입해도 되고 android:text="@string/hello"처럼 문자열 리소스를 지정해도 된다.

android:textColor 속성
문자열의 색상을 지정한다. android:textColor="#FF0000"처럼 값은 16진수 RGB 형식을 사용한다.

android:textSize 속성
문자열의 크기를 지정한다. android:textSize="20sp"처럼 값은 숫자를 사용하며 단위는 생략할 수 없다. 이때 단위는 px, dp, sp등을 사용한다.

android:textStyle 속성
문자열의 스타일을 지정한다. android:textStyle="bold"처럼 이용하며 값은 bold, italic, normal 중에서 선택한다.

android:autoLink 속성
autoLink속성은 TextView에 출력할 문자열을 분석해 특정 형태의 문자열에 자동 링크를 추가해 준다. 만약 android:autoLink="web"으로 설정하면 문자열에 웹 주소가 포함됐을 때 해당 문자열을 링크 모양으로 표시한다. 그리고 사용자가 그 링크를 클릭했을 때 웹 브라우저를 실행한다.
autoLink 속성값으로는 web, phone, email 등을 사용할 수 있으며 여러 개를 함께 설정하려면 |기호로 연결한다.

android:maxLines 속성
TextView에 문자열을 출력할 때 긴 문자열은 자동으로 줄바꿈을 한다. 그런데 때로는 문자열이 특정 줄까지만 나오도록 해야할 때가 있다. android:maxLines="3"으로 설정하면 문자열이 3행까지만 출력된다.

android:ellipsize 속성
maxLines 속석을 이용할 때 출력되지 않은 문자열이 더 있다는 것을 표시하려면 줄임표(...)를 넣는다. 이때 ellipsize속성을 지정한다. ellipsize 속성값으로는 end, middle, start등을 설정한다.

이미지 뷰

android:src 속성
ImageView에 출력할 이미지를 설정한다. 리소스 이미지, 파일 이미지, 네트워크 이미지 등을 출력할 수 잇다. 리소스 이미지는 src 속성으로 android:src="@drawable/image3"처럼 설정한다.

android:maxWidth, android:maxHeight, android:adjustViewBounds 속성
출력하는 이미지의 최대 크기를 지정. 뷰의 크기는 layout_width, layout_height 속성으로 설정하지만 이 속성은 크기가 고정되어 있어서 뷰에 넣을 이미지 크기가 다양하다면 이미지와 뷰의 크기가 맞지 않는 상황이 발생할 수 있다.
위의 세 속성을 같이 사용하면 이미지가 잘리지 않고, 이미지가 작을때도 크기에 맞게 자동조정되서 나온다.

버튼, 체크박스, 라디오 버튼

Button : 사용자 이벤트 처리
CheckBox : 다중 선택
RadioGroup > RadioButton : 단일 선택을 제공하는 뷰

에드트 텍스트

EditText는 사용자가 글을 입력할 수 있는 뷰이다.

android:lines, android:maxLines 속성
EditText는 한 줄 입력 크기로 출력되었다가 사용자가 키보드에서 엔터를 누르면 아래로 늘어나서 여러 줄 입력 크기가 된다. 그런데 처음부터 여러 줄 입력 크기로 나오게 하는 속성이 android:lines이다.(처음부터 크게) maxLines는 엔터를 누르면 크기가 늘어나서 고정된다.

android:inputType 속성
EditText에 글을 입력할 때 올라오는 키보드를 지정하는 속성. 키보드로 한줄 입력, 전화번호 입력 모드 지정 등 강제할 수 있다.


6-4. 뷰 바인딩

뷰 바인딩은 레이아웃 XML 파일에 선언하는 뷰 객체를 코드에서 쉽게 이용하는 방법이다. findViewById()함수로 하나하나 가져오는게 힘들다. "액티비티에서 findViewById() 함수를 이용하지 않고 레이아웃 XML 파일에 등록된 뷰 객체를 쉽게 사용할 수는 없을까?" -> 뷰바인딩

그래들 파일에 뷰 바인딩 설정

android {
	(...생략...)
    viewBinding {
    	enabled = true
    }
}

build.gradle 파일에 buildFeatures를 위와 같이 선언한다. 그러면 레이아웃 XML파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어진다.

자동으로 만들어진 클래스의 inflate()함수를 호출하면 바인딩 객체를 얻을 수 있다. 위와 같이 사용하면 된다. 필요없는 레이아웃 XML 파일은 XML 파일의 루트 태그에 tools:viewBindingIgnore="true"라는 속성을 추가한다.


카카오톡 비밀번호 확인 화면 만들기

  1. 새 모듈 만들기
  2. 문자열 리소스 등록하기화면에 출력할 문자열을 리소스로 등록한다.
  3. 레이아웃 XML 파일 작성하기
  4. 결과화면
profile
배운거 정리하기

0개의 댓글