응용 프로그램(Applications)
-안드로이드 스마트폰에서 사용할 수 있는 일반적인 응용 프로그램
-웹 브라우저, 달력, 구글맵, 연락처, 게임 등 사용자 입장에서 가장 많이 사용
-JAVA 또는 Kotlin으로 제작됨
응용 프로그램 프레임워크(Application Framework)
-안드로이드 API가 존재하는 곳
-안드로이드폰 하드웨어에 접근할 때 API를 통해서만 가능
안드로이드 런타임(Android Runtime)
-JAVA 코어 라이브러리와 달빅 가상 머신 또는 아트 런타임으로 구성됨
-안드로이드는 JAVA 또는 Kotlin 문법으로 프로그래밍하지만 Java 가상 머신을 사용하지 않고 이곳의 달빅 가상 머신이 아트 런타임을 사용함
라이브러리(Libraries)
-안드로이드에서 사용되는 여러 시스템 라이브러리는 시스템 접근 때문에 Java 또는 Kotlin이 아닌 C로 작성
-> 성능이 뛰어나며 세밀한 조작 가능
리눅스 커널(Linux Kernel)
-하드웨어의 운영과 관련된 저수준의 관리기능
-메모리 관리, 디바이스 드라이버, 보안 등
❖ 안드로이드 애플리케이션의 기본적인 작성법을 익힌다.
❖ AVD의 명칭을 파악한다.
❖ 안드로이드 프로젝트의 구성을 이해한다.
-Name: 대문자로 시작하는 것이 좋다
-Package name: com.cookandroid.helloandroid -> 도메인 이름(cookandroid.com)과 애플리케이션 이름을 이어서 만듦
-Save location: 프로젝트가 저장될 폴더 (한글 폴더명은 불가)
-Language: Kotlin
-Minimum API level
LinearLayout에는 xmlns:app, tools:context속성 필요없다!
-> 대부분 linear layout 사용
<ctrl>+<Alt>+<O>
를 누르면 불필요하게 임포트된 문장이 제거된다.
위젯에 이벤트를 작동하기 위한 동작 순서
1. 위젯 변수 생성 ex) lateinit var button1 : Button
2. 변수에 activity_main.xml 파일의 위젯 id 대입 ex) button1=findViewById<Button>(R.id.button1)
3. 이벤트 발생 시 동작하는 람다식을 위젯에 정의 ex)button1.setOnClickListener{}
1.Java와 완벽히 상호 호환, Java 코드를 완전히 대체 가능
2.Java보다 문법이 간결함
3.프로그램의 안정성을 높여줌
4.var 또는 val 예약어를 통해 데이터 형식을 선언하지 않고 변수를 선언할 수 있음
2) var(variable)
-일반 변수를 선언할 때 사용
-필요할 때마다 계속 다른 값을 대입 가능
3) val(value)
-변수 선언과 동시에 값을 대입하거나, 초기화 없이 선언한 후에 한 번만 값을 대입 가능
-한 번 값을 대입하고 나면 값을 변경할 수 없음
데이터 형식 변환
-캐스팅 연산자 사용
-Kotlin에서 제공하는 toInt()나 toDouble() 등의 정적 메소드 사용
null 표시
-Kotlin은 기본적으로 변수에 null 값을 넣지 못함
-> 변수를 선언할 때 ?를 붙여야 null 대입 가능
-null값이 아니라고 표시 -> !! (null이 들어가면 오류 발생)
when문의 처리 방법
-범위로 처리 : in 키워드 사용
배열
-여러 개의 데이터를 하나의 변수에 저장하기 위해 사용
type 1
var 배열명 = Array<데이터 형식>(개수, {초깃값})
var 배열명 = Array<데이터 형식>(개수){초깃값}
2차원 배열 선언 형식
예외(exception)
kotlin 프로그램 실행 중에 발생하는 오류
-try~catch문을 통해 이 오류를 처리함
연산자
기존의 클래스가 가지고 있는 것을 그대로 물려받으면서 필요한 필드나 메소드를 추가로 정의하는 것을 의미함
추상 클래스와 추상 메소드를 사용하는 목적
공통적으로 사용되는 기능을 추상 메소드로 선언 해놓고, 추상 클래스를 상속받은 후에 추상 메소드를 오버라이딩해서 사용하기 위함
구현한다(implement):추상 메소드를 오버라이딩하는 것을 의미함
-추상 클래스와 성격이 비슷함
-interface 키워드를 사용하여 정의하고 내부에는 추상 메소드를 선언함
-클래스에서 인터페이스를 받아 완성할 때 상속과 마찬가지로 ':인터페이스 이름' 형식을 사용함
-인터페이스는 '상속받는다'고 하지 않고 '구현한다'고 함
-Kotlin은 다중 상속을 지원하지 않음(대신 인터페이스를 사용하여 다중 상속과 비슷하게 작성할 수 있음)
함수를 익명함수 형태로 간단히 표현한 것
안드로이드에서 제공하는 패키지 목록 확인 링크:
https://developer.android.com/reference/kotlin/packages
<String> <Int> <Double>
equals() 메소드
simpleDateFormat
뷰 클래스
-안드로이드 화면에서 실제로 사용되는 것들은 모두 View 클래스의 상속을 받음
(버튼, 라디오 버튼, 이미지 등은 모두 View 클래스의 서브클래스임)
-'위젯'이라고도 부름
(화면에서의 버튼: 버튼 위젯, 실제 코드에서의 버튼: 버튼 클래스)
레이아웃
-다른 위젯을 담을 수 있는 위젯 -> 레이아웃
(위젯을 담아 배치하는 틀)
-ViewGroup 클래스 아래에 존재
(레이아웃도 크게 보면 위젯에 포함된다)
안드로이드에서의 위젯
-control이라고 부르는 것들!
View 클래스 계층도
-최상위에 Object(java.lang.Object) 클래스가 있고 이를 상속받은 View클래스가 있음
-안드로이드 화면에 나타나는 모든 위젯은 View 하위에 존재한다
-뷰 컨테이너(View container)
(레이아웃이라고 부르지는 않지만 다른 뷰를 포함하는 ListView, GridView, TabHost, Gallery)
(뷰 컨테이너도 ViewGroup 클래스에서 상속받음)
버튼의 속성
(https://developer.android.com/reference/packages에서 자세히 확인 가능)
View 클래스의 주요 XML 속성
-안드로이드 계층도를 보면 View 클래스가 모든 위젯의 부모
(즉, 위젯과 레이아웃 등은 모두 View 클래스의 속성과 메소드를 상속받음)
-View 클래스의 중요한 속성을 파악하면 하위 클래스도 쉽게 이해할 수 있음)
android:layout_width-> 가로 height-> 높이
wrap_content -> 내용만 감싸면 된다, match_parent -> 부모 클래스와 일치하도록!
fill_parent와 match_parent는 완전히 똑같다!
값을 숫자로 직접 지정하는 경우
-단위에 주의 해야함
-px(PiXel) 단위
(가장 단순한 단위 avd의 해상도가 1080x1920일때 -> 1080px로 설정하면 된다)
visibility 속성
-위젯을 보일 것인지 여부를 결정함
visible: default로 설정되어 있으며, 보이는 상태
invisible: 안보이는 상태이지만, 보이지 않을 뿐 원래의 자리를 계속 유지함
gone: 안보이는 상태이며, 원래의 자리까지 사라짐
enabled,clickable 속성
-XML 보다 Kotlin 코드에서 주로 사용된다
-값은 true와 false이며 디폴트 값은 true임
(enabled 속성: 위젯의 동작여부, clickable 속성: 클릭이나 터치가 동작 여부)
rotation 속성
-위젯 회전시켜서 출력함
-값은 각도로 지정
text 속성
-text View에 나타나는 문자열을 표현
-"문자열"형식으로 값을 직접 입력하거나 "@string/변수명" 형식으로 지정한 후 strings.xml 파일에 지정할 수 있음
textColor 속성
-글자의 색상을 지정
-background 속성처럼 값은 #RRGGBB나 #AARRGGBB 형식을 사용함
textSize 속성
-글자의 크기를 dp,px,in,mm,sp 단위로 지정
typeface 속성
-글자의 글꼴을 지정
-값으로 sans, serif, monospace를 설정할 수 있다. 디폴트는 normal
textStyle 속성
-글자의 스타일 지정
-값으로 bold, italic, bold|italic을 설정할 수 있고, 디폴트는 normal
singleLine 속성
-글이 길어 줄이 넘어갈 경우 강제로 한 줄까지만 출력하고 문자열의 맹 뒤에 '...'를 표시
-값으로 true와 false를 설정할 수 있고 디폴트는 false
dp: 독립단위 dpi=px
버튼과 에디트텍스트는 사용자에게서 어떤 값을 입력받기 위한 가장 기본적인 위젯
두 위젯은 View 클래스와 TextView 클래스를 상속받으므로 비슷하게 사용 가능함
버튼 클릭 시 동작하는 Kotlin 코드를 세단계로
var mybutton : Button
)mybutton = findViewById<Button>(R.id.button1)
)mybutton.setOnClickListener { // 동작 내용을 이 부분에 }
)setOntouchLISTENER RETURN값이 FALSE이면 ? 받은 터치를 다른 곳에서도 사용할 수 있게 남겨두겠다 TRUE이면 받은 터치를 없애겠다는 뜻!
TRIM() 공백 없애기
TOAST().makeText(applicationContext,"넣고싶은말",Toast.LENGTH_SHORT).show()
스위치와 토글버튼
-스위치와 토글버튼은 모양만 조금 다를 뿐 용도는 거의 동일함
-스위치의 주 용도는 온/오프 상태 표시
(XML 속성이나 관련 메소드는 모두 체크박스와 동일하게 사용 가능)
(checked 속성은 true와 false에 따라서 색상과 글자가 다르게 표현된다!)
라디오 버튼과 라디오 그룹
-라디오 버튼 (여러개 중 하나 선택)
-라디오 그룹 (ViewGroup-LinearLayout의 하위 클래스로 존재함,clearCheck()-라디오 그룹 안에 체크된 것을 모두 해제함)
-그림을 출력하는 위젯
-그림을 넣거나 화면을 화려하게 구성할 때 사용함!
[res]-[drawble]폴더에 그림파일이 잇어야한다!
android:scaleType="fitXY" : 가로/세로 비율에 상관없이 ImageView의 레이아웃의 각 면에 꽉 차게 출력된다.
android:scaleType="matrix" : 이미지 원본의 크기와 비율을 유지하며 이미지 원본대로 왼쪽 상단을 기준으로 출력된다. 이미지가 ImageView의 레이아웃 보다 크다면 나머지 이미지는 출력되지 않는다.
android:scaleType="fiStart" : ImageView 레이아웃 안에서 이미지의 가로/세로 비율을 유지하며 출력되지만 ImageView의 레이아웃의 왼쪽 상단을 기준으로 정렬된다.
android:scaleType="fitEnd" : ImageView 레이아웃 안에서 이미지의 가로/세로 비율을 유지하며 출력되지만 ImageView의 레이아웃의 오른쪽 하단을 기준으로 정렬된다.
android:scaleType="center" : 이미지 원본 크기와 비율을 유지하며 이미지의 중앙을 layout_width, layout_height 안에 출력한다. 이 때 레이아웃보다 이미지가 크면 레이아웃의 벗어난 이미지는 출력되지 않은다. 레이아웃보다 이미지가 작으면 이미지를 center 정렬 한다.
android:scaleType="matrix" : 이미지 원본의 크기와 비율을 유지하며 이미지 원본대로 왼쪽 상단을 기준으로 출력된다. 이미지가 ImageView의 레이아웃 보다 크다면 나머지 이미지는 출력되지 않는다.
duplicate resources-> 이름은 같고 확장자가 다른 파일이 2개이상 있을 경우 발생한다!
버튼 색깔 변경? android:backgroundTint="@color/black"
checkbox.setOnCheckedChangeListener{} 사용
레이아웃의 대표적인 속성
-orientation: 레이아웃 안에 배치할 위젯의 수직 또는 수평 방향을 설정
-gravity: 레이아웃 안에 배치할 위젯의 정렬 방향을 좌측, 우측, 중앙 등으로 설정
-padding: 레이아웃 안에 배치할 위젯의 여백을 설정
-layout_weight: 레이아웃이 전체화면에서 차지하는 공간의 가중값을 설정하는데, 여러 개의 레이아웃이 중복될 때 주로 사용
-baselineAligned : 레이아웃 안에 배치할 위젯을 보기 좋게 정렬함
레이아웃 종류
-리니어 레이아웃
-렐러티브 레이아웃
-프레임 레이아웃
-테이블 레이아웃
-그리드 레이아웃
orientation 속성
-리니어레이아웃의 가장 기본적인 속성
-vertical, horizontal을 지정할 수 있음
gravity 속성
-레이아웃 안의 위젯을 어디에 배치할 것인지를 결정
-값으로 left, right, center, top, bottom 등을 사용
-2개를 조합하여 right|bottom처럼 사용할 수도 있음
layout_gravity 속성
-자식을 어디에 위치시킬지를 결정
baselineAligned 속성
-크기가 다른 위젯들을 보기 좋게 정렬해주는 것으로 true와 false 값을 지정할 수 있음
-> layout weight -> 높이 일정하게
위치를 교차해서 코드 적으면 된다!
위젯을 표형태로 배치할 때 주로 사용
layout_span
-테이블 레이아웃 안에 포함된 위젯에 설정하는 속성
-열을 합쳐서 표시하라는 의미
layout_column
-테이블 레이아웃 안에 포함된 위젯에 설정하는 속성
-지정된 열에 현재 위젯을 표시
stretchColumns
-<TableLayout>
자체에 설정하라는 속성
좀더 직관적이다!
행 확장도 간단하게 할 수 있음
rowCount: 행의 수
columnCount: 열의 수
orientation: 그리드를 수평 방향으로 우선할 것인지, 수직 방향으로 우선할 것인지를 결정
layout_row: 행번호(0부터 시작)
layout_column: 열 번호(0부터 시작)
layout_rowSpan: 행을 지정된 수만큼 확장함
layout_columnSpan: 열을 지정된 수만큼 확장함
layout_gravity: 주로 fill, fill_vertical, fill_horizontal 등으로 지정
옵션 메뉴(option menu)
-키패드의 메뉴 버튼 또는 화면 오른쪽 위의 메뉴 아이콘을 눌렀을 때 화면 하단에 나오는 메뉴
-목록이 많으면 위쪽으로 쌓여 출력됨(화면이 넘어갈 정도로 목록이 많으면 스크롤해서 선택가능함)
컨텍스트 메뉴(context menu)
-위젯 등을 롱클릭하면 나오는 메뉴(일반적으로 제목과 함께 화면의 중앙에 출력됨)
<menu>-<item>
onOptionsItemSelected( ) 메소드
-Activity 클래스에서 오버라이딩함
-메뉴를 선택했을 때 어떤 동작을 할 것인지를 담고 있음
-메뉴는 항목이 여러 개 나오기 때문에 보통 메소드 내부에서 when문을 사용함
isAntiAlias -> 가장자리를 매끄럽게!