Blinking My Melody

Android Studio 수업 정리 1

2019. 3. 28. 23:20

package : 소문자 / class : 대문자

 

1. Minimum API level

- 앱이 설치되는 폰의 최소 버전

- 높게 잡는 것이 유리

- 카톡, 라인, 인터넷 뱅킹 등 많은 사람들의 폰에 설치되어야 할 어플을 제작하려면 최대한 낮은 단계 버전을 사용해야함

왜? >> 많이 사용하는 만큼 낮은 성능의 폰부터 높은 성능의 폰까지 다양하게 사용할 가능성이 높으므로 낮은 성능의 사용자를 배려해 낮게 하는 것이 좋음

 

 

2. Virtual Device

- 다양한 여러 종류의 버전이 있음

=> 아직 출시되지 않은 폰을 선제로 확인 가능하거나 구하기 힘든 해상도의 버전 테스트 가능

 

 

 

Android Studio

 

1. mainfest

- 일종의 자기소개서

- 앱 설치할 때 ' 다음의 권한이 필요합니다' 하는 표시도 다 mainfest에서 작성하는 것

 

 

2. xml

- 자유롭게 정의 가능

 

 

3. drawable 폴더 규칙

- drawable 폴더 안에 폴더를 다시 만들면 안됨

- res 폴더 안에 들어가는 모든 이름은 소문자_만 가능 (사진, 영상 파일 등을 추가할 때 특히 주의)

예) Icon-1.jpg (x) / icon_start.jpg (o)

 

 

4. mipmap

- 앱을 설치했을 때 사용자의 핸드폰 바탕화면에 보여질 앱의 아이콘 모양

 

 

5. values

- 그림도 아니고 화면 디자인도 아닌 정적인 데이터 (색상표, stringable(문자열), 테마 등)

=> res를 잘 관리해야 완성도 높은 앱을 만들 수 있다 (실제 용량을 여기서 많이 잡아 먹음)

 

 

6. Gradle Scripts

- 설치에 관련된 모든 정보 (필요한 외부라이브러리 등)

=> 초반에는 건들일 일이 없음

 

 

7. xml 파일에서 java 소스코드를 부르는 방법

- R.layout.activity_main

● 대문자 R이라는 클래스를 만들고 그 밑에 layout 폴더 안에 activity_main이라는 자바 파일 이름

● 다른 자바 파일 (activity 파일)을 불러오고 싶을 땐 뒤에 자바 파일명만 변경해주면 됨

 

 

 

Layout

 

1. 안드로이드에서 화면을 디자인 하는 방법

- 코드는 Activity.java 파일에서 작성

- Activity.java는 반드시 하나의 layout을 지정해 사용해아 함

- 폴더 내에 사용하지 않는 xml 파일은 있어도 상관 없음, 하지만 프로젝트 파일 내에 에러가 있으면 컴파일 되지 않음

- 파일 이름에는 영어 소문자_만 사용 가능

 

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main); // 이 부분

}

 

 

2. 레이아웃

- HTML과 마찬가지로 트리 구조, 최상위는 반드시 레이아웃, 내부에는 위젯 또는 또 다른 레이아웃 포함 가능

- 안드로이드 SDK에서 기본적 레이아웃 몇 가지 제공, 필요한 경우 추가 라이브러리 사용 가능

- 안드로이드 SDK에서 기본적으로 제공하는 레이아웃은 name space로 android:레이아웃

- 외부에서 추가로 다운 받은 위젯이나 라이브러리는 태그 앞에 name space로 app:태그이름

- 레이아웃 중첩 가능, 깊이가 깊어질수록 성능이 떨어짐 (Relative Layout/Constraint Layout을 사용해 깊이 줄임)

왜?>> 너무 많이 중첩시키면 글자를 렌더링해서 화면에 나타내게 되는데 그렇게 되면 뎁스가 깊어지게 된다. 뎁스가 깊어지면 깊어질수록 시간이 오래걸리게 되기 때문에 성능이 떨어지는 것

 

 

3. 기본 속성

(1) 방향 지정

- 초기 버전의 안드로이드에서는 위젯 또는 레이아웃 방향 지정할 때 Left/Right/Top/Bottom을 사용했음, 하지만 일부 언어(아랍어 등)는 시작점이 오른쪽에서 왼쪽이기 때문에 Start/End라고 업데이트 되었음

- 낮은 버전의 minimum SDK로 프로젝트 생성할 경우 Left와 Start 속성 모두 적어줘야 정상 동작

- 높은 버전의 minimum SDK로 프로젝트 생성할 경우 Start나 Left 둘 중 하나만 적어도 동작

 

(2) 크기 지정

- 위젯 또는 레이아웃의 크기를 지정할 때 width/height를 반드시 지정해야 함

match_parent wrap_content 직접 입력

부모의 사이즈에 맞춤

즉, 가능한 만큼 가장 크게

위젯의 크기에 맞춤

즉, 내용물 사이즈 만큼만

10dp, 30dp등과 같이 사이즈 직접 입력

- dp>> 휴대폰 기종이 워낙 다양하기 때문에 pixel 단위로 지정해버리면 저해상도폰에서 맞춘 그림이 고해상도 최신 폰에서는 작게 보임, 그 반대도 마찬가지.

하지만 dp 단위로 지정하면 저해상도폰에서 맞춘 그림이 고해상도폰에 가도 작아지지 않고, 저해상도폰에 가도 커지지 않음 (정확하진 않고 약간의 오차는 있지만 pixel만큼 디자인이 와장창 깨질 일이 없음)

그러나, dp 단위도 잘 써야하는 이유가 휴대폰 → 태블릿 전환은 소용 없음

 

(3) 위치 지정

- Padding : 자신의 경계에서 내부 요소 사이의 여백, 상/하/좌/우 각각 지정 가능, dp 단위

- Margin : 다른 위젯과 자신 사이의 여백, 상/하/좌/우 각각 지정 가능, dp 단위

- Gravity : 자신 내부 요소의 정렬 (예. 버튼 안의 글자의 정렬 등)

- Layout Gravity : 일부 Layout에서 사용, Layout 내에서 자신의 위치 정의

 

 

4. Linear Layout

https://strawberry15.tistory.com/33

- 한 방향으로 위젯 배치(가로 혹은 세로로만 배치), orientation 속성을 반드시 지정해주어야 함

- 팝업 등 간단한 화면에 주로 사용

- orientation

horizontal vertical
가로 세로

 

 

5. Relative Layout

- 기준점으로부터 상태적인 위치를 적어 위젯 배치 (기준점 = 부모 위젯(레이아웃) 또는 다른 위젯)

- 기준점이 항상 필요함

- 처음 놓는 최초의 위젯은 기준점을 삼을 것이 없기 때문에 부모로만 기준을 함, 그 이후에 추가되는 위젯은 이미 전에 추가된 위젯으로 기준점을 삼거나 부모로 기준점을 삼을 수 있음

 

(1) id (아이디)

- 디자인이 고정이고 변경의 여지가 없으면 생략 가능 (Relative Layout일 때, 자바 소스 코드에서 얘를 변동할 가능성 전혀 없을 때)

- Activity.java에서 위젯을 참고하는데 사용

- Relative Layout에서 다른 위젯을 참고할 때 사용

- 아이디 추가>> android:id = "@+id/원하는 아이디명"

 

* @+id와 @id의 차이

@+id @id

없던 아이디 추가할 때

xml 파일의 라인 넘버 기준으로 아래쪽에 선언된 위젯을 앞에서 참조할 때

이미 존재하는 아이디 참조할 때

- xml 파일은 제일 윗 줄부터 읽으면서 렌더링을 함. 읽고 있는 부분보다 밑에 있는 아이를 참조할 수도 있는데, @+id로 하면 오류가 나지 않지만 @id로만 쓰면 에러가 날 수 있기 때문에 무조건 @+id로 사용하는 것이 좋음

 

 

6. Constraint Layout

- 최근 추가된 레이아웃, Android Studio 최신 버전(2.3.3 이상)의 경우 프로젝트 생성시 자동으로 추가, 그 미만 버전에서는 Graddle에서 의존성 추가를 해줘야 사용 가능

- 각 위젯은 자신의 상/하/좌/우/baseline에 대한 제약 정의

- 각 위젯은 최소한 두 축(방향) 이상의 제약을 정의해야 함

- xml namespace로 android 대신 app을 사용

 

* Relative Layout과 차이점

- Constraint와 Constraint를 연결하는 중간 선이 스프링처럼 동작함, 따라서 top이나 bottom 둘 중 하나 이상을 무조건 정의해 줘야 오류가 나지 않음