뷰와 뷰 그룹
안드로이드 화면에서 화면 표시에 사용되는 클래스들은 모두 view라는 클래스의 상속을 받은 객체이다.
이러한 클래스를 위젯 또는 뷰라고 부른다.
또한 다른 위젯을 담을 수 있는 위젯은 ViewGroup 클래스의 하위에 존재하는데, 이렇게 다른 위젯을 담을 수 있는 클래스를 레이아웃이라고 한다.
-> UI, 화면그리기
-> xml 소스를 UI 툴로 편집이 가능

구성 
<요소 
속성이름 = "속성값"
속성이름 = "속성값".../>
</요소>

기본 속성
- id : 요소들을 구분하는 식별자, xml이나 java코드에서 해당 UI 구성요소를 지정할 수 있는 고유 값
- layout_width : 가로크기
- layout_height : 세로크기
- background : 생상, 이미지(colors.xml에 정의된 값 사용가능)
- text : 내부 텍스트 명, 직접 입력하거나 string.xml 에 정의된 값 사용가능
- txetSize : 내부 텍스트 폰트 사이즈
- fontfamily : 폰트 종류
- margin : 외부 여백 크기 (layout 종류에 따라 이름이 다를 수 있다)
- padding : 내부 여백 크기
- gravity : 내부 구성 요소의 위치

속성값
wrap_content : 내부 구성 요소에 따라 컨텐츠의 크기를 조정
match_parent : 부모 속성 요소와 동일하게 컨텐츠의 크기를 조정
숫자로 크기를 지정 : 10px, 20dp, 30sp
단위
- px : 픽셀, 화면밀도와 관계가 없고, 스크인상의 실제 픽셀에 대응하는 단위
- dp(dip : Density-Independent Pixcel) : 여러 밀도의 화면에서 일정한 크기를 보여줄 수 있도록 제공되는 치수, px = dp * (dpi / 160)과 같이 계산
- sp(Scale-Independent Pixcel) : dp와 유사한 기능을 한다. 추가적으로 사용자의 설정에 따라 변경되는 텍스트 크기를 반영
- pt(Points) : 화면밀도, 픽셀과 관계가 없고, 1pt는 물리적 화면 크기의 1/72인치
- in(Inches) : 화면밀도, 픽셀과 관계가 없고, 물리적 화면 크기의 1인치
- mm(milimeters) : 화면밀도, 픽셀과 관계가 없고, 물리적 화면 크기의 1mm
-> 화면 밀도 : 물리적 화면 공간에 있는 픽셀의 갯수, 일반적으로 dpi(dots per inch)라고 함.
-> ldpi (저밀도) : ~120dpi
    mdpi (중간 밀도) : ~160dpi
    hdpi (고밀도) : ~240dpi
    xhdpi (초고밀도) : ~320dpi
    xxhdpi (초초고밀도) : ~480dpi
    xxxhdpi : ~640dpi
=================================================
뷰 그룹
=================================================
LinearLayout : 뷰를 수직 혹은 수평으로 배치할 수 있는 뷰
orientation 속성을 통해 배치방향을 결정 할 수 있다.

1. linear layout에서 gravity와 layout_gravity :
gravity는 부모뷰에 정의, 자식뷰가 내부 어디에 위치하는지를 정의
layout_gravity는 자식뷰가 부모뷰의 어디에 위치하는지를 정의

2. layout_weight 속성
크기가 정해져 있지 않을 경우 가중치를 정해 자식뷰의 크기 비율을 결정
=================================================
RelativeLayout : 자식 뷰 또는 부모 뷰 간의 관계에 따라 배치를 적용하는 레이아웃

1. RelativeLayout의 기본 속성(부모 뷰에 정의)
gravity 자식뷰의 중력 방향 결정
ignoregravity gravity 설정 상태에서 특정 자식 뷰에 대해 gravity 속성을 무시

2. 부모 뷰 그룹간의 관계에 따른 배치(자식 뷰에 정의) == 1번 항목에 위배되지 않을 경우 적용
layout_alignPrentStart 부모 뷰 그룹 영역에서 좌측에 배치
layout_centerHorizontal 부모 뷰 수평 영역에서 중앙에 배치
layout_alignPrentEnd 부모 뷰 그룹 영역에서 우측에 배치
layout_alignPrentTop 부모 뷰 그룹 영역에서 상단에 배치
layout_alignPrentBottom 부모 뷰 그룹 영역에서 하단에 배치

3. 자식 뷰 간의 관계 배치 속성
layout_above = [기준이 되는 뷰 ID]   기준이 되는 뷰의 상단에 배치
layout_below = [기준이 되는 뷰 ID]   기준이 되는 뷰의 하단에 배치
layout_toStartOf = [기준이 되는 뷰 ID] 기준이 되는 뷰의 좌측에 배치
layout_toEndOf = [기준이 되는 뷰 ID] 기준이 되는 뷰의 우측에 배치
=================================================
FrameLayout : 여러개의 뷰를 중첩으로 배치하고 그 중 하나를 레이아웃 전면에 표시할 때 사용하는 레이아웃
액자(Frame)에 그림을 끼우면 제일 앞에 끼워진 그림이 전면에 보여지듯이, 가장 마지막으로 추가된 자식 뷰 위젯이 전면에 겹쳐서 표시되는 레이아웃

=================================================
ConstraintLayout : 구성 시, 뷰 위젯의 위치와 크기를 유연하게 조절할 수 있게 만들어주는 레이아웃
레이아웃에 배치되는 뷰들에 여러 제약(Constraint)을 적용하여 각 뷰의 위치와 크기를 결정
layout_constraintXXX 와 같이 구체적인 제약조건을 지정

=================================================
TextView : 화면에 고정된 텍스트 문자열을 고정하는 뷰

=================================================
EditText : TextView에게서 상속받은 클래스, 사용자에게 입력을 받을 수 있는 뷰, 입력기능을 제외하고 텍스트 뷰와 동일
hint : 사용자 입력전에 보여지면, 입력하면 사라지는 속성(placeholder)

=================================================
Button  : 클릭할 수 있는 버튼
ImageButton  : 이미지를 설정 할 수  있는 버튼
scaleType : fitcenter : scaleType을 fillcenter로 지정하여야 일정한 비율로 크기를 변경 가능
background:@android:color/transparent : 배경색 제거
scrCompat : 이미지 버튼 이미지에 대한 위치를 지정
contentDescription : 이미지 버튼을 사용할 경우 해당 속성을 사용하여 주석을 달아주어야 함

=================================================
Switch : 두 개의 상태를 표시하는 버튼
showText : 스위치에 표시되는 텍스트를 사용할 것인지 유무
textOff : 스위치 Off 상태일 경우 표시하는 텍스트 - showText 속성이 true로 정의도어 있어야 동작
textOn : 스위치 On 상태일 경우 표시하는 텍스트 - showText 속성이 true로 정의도어 있어야 동작
checked : 스위치의 default 값을 지정

=================================================
CheckBox : 체크됨, 체크되지 않음 을 표시하는 버튼
Checked : 디폴트 체크 상태를 설정

'Android' 카테고리의 다른 글

Android 초기 설정·개념  (0) 2021.12.05

안드로이드
 : 구글에서 개발한 운영체제(OS)

-> base : 리눅스 커널 위에서 동작
* 커널 : CPU 스케줄링, 하드웨어 컨트롤, 메모리 관리

운영체제 : USER <-> Application <-> OS <-> H/W

안드로이드 앱 개발
- 개발 언어 : JAVA, Kotlin, C
- 화면구성 : xml
- 안드로이드 개발 도구 : sdk(software development kit) == 운영 체제 등을 위한 응용프로그램들을 만들 수 있게 해주는 개발 도구의 집합
- 안드로이드 빌드(앱을 묶고 필요한 라이브러리 파일 임포트) 도구 : gradle(Java 기반 동작) 
- 통합 개발 환경(IDE) : Android Studio, Eclipse(최근 버전은 지원하지 않음)

- Android Studio 를 설치하면 java와 Gradle을 설치되지만, 버전관리에 어려움이 있음 -> 각각 활용
vt-x : 하드웨어 가상화(어플리캐이션 확인을 위해 필요)
-> https://leomoon.com/downloads/desktop-apps/leomoon-cpu-v/

Java version에 따른 Gradle version 확인 : https://docs.gradle.org/current/userguide/compatibility.html
Java Version : 15.0.2
Gradle Version : 7.0.2

Java 설치
JDK 경로 설정(대소문자 구분) : C:\App\Dkit\JDK
 -> 해당 경로에 jdk 압축 해제 -> 환경변수 편집(프로그램 별 Java Version 관리)

Gradle 설치
Gradle 경로 설정(대소문자 구분) : C:\App\Dkit\Gradle
https://gradle.org/releases/ 접속하여 7.0.2 version을 binary-only 로 다운로드 후 경로에 압축해제
-> 환경변수 편집 -> cmd에서 gradle -version 입력후 JVM version JDK와 일치하는지 확인

Android Studio 설치
https://developer.android.com/studio
프로그램 경로 관리를 위해 경로 설정 : C:\App\Tools\IDE\AndroidStudio
- Android Virtual Device : 개발 중 보여주는 화면 표시를 위해 필요함
- Performance(버전에 따라 안나올 수 있음) : 하드웨어 가속 기능을 사용 할것인지 유무 (하드웨어 가속이 권장되며, 일반적으로 더 빠르다.)
- 하드웨어 가속기능을 사용하려면, SDK 도구 : 최신 버전 권장(최소 17 이상), SDK 플랫폼 : **********************

SDK 또한 버전 관리를 위해 경로 생성 : C:\App\Dkit\Sdk
-> 커스텀 옵션으로 안드로이드 스튜디오 설치

API Level
API 레벨이란 안드로이드 플랫폼 버전에 따라 제공되는 플랫폼 API 수정 사항을 구별하는 정수 값
안드로이드 플랫폼은 애플리케이션이 안드로이드 시스템과 통신할 수 있도록 해 주는 플랫폼 API를 제공
API 업데이트는 이전 버전의 API가 제거되는 것이 아니라 이전 버전의 API와 호환되면서 새로운 기능들이 추가되는 것을 의미

프로젝트 생성
file -> Setting -> gradle 설정으로 가서 커스텀 Gradle과 그 gradle을 사용할 자바 버전 설정

Virtual Device 설정
Android Virtual Device Manager -> Create Virtual Device -> 화면설정 -> x86 Images -> OS Version 다운로드, 설정
=> 무겁고 실행이 잘 안되는 버그가 있어서 NOX를 이용해 진행!
메모장으로 nox_adb.bat 아래와 같이 생성
"nox_adb.exe  파일 경로" connect 127.0.0.1:62001
pause
=> nox 앱을 잡을수 있게 한 프로그램!
========================================
AndroidManifest.xml
1. 어플리케이션의 고유한 식별자 정의 (package)
2. 어플리케이션에 필요한 접근 권한 설정
3. 어플리케이션의 구성 요소 정의
========================================

'Android' 카테고리의 다른 글

[Android] View, layout, attribute, widjet  (0) 2021.12.05

+ Recent posts