Android #2 - Activity, View (국비28일차)

 

<정리예정.....ㅜㅜ>

 

 

오늘은 

Activity, View에 대해서 공부를 해보려 한다.

1. 자바로 setContentView 구현

2. XML로 setContentView 구현

 

 

 

 

 

 

앞으로는 새로운 예제를 만들 때마다

위와 같은 네이밍을 쓸 예정이다.

그리고 이것은 minumum SDK에 help me choose를 누르면

나오는 정보인데

안드로이드 버전으로 따졌을 때

몇 %의 user가 이용가능할지

적어둔 표다.

 

 

 

여하튼 예제를 만들고 

오늘의 학습을 시작해 보자.

 

 

 

1. 자바로 setContentView 구현

 

 

먼저 어제 setContentView()를

자바로도 그리고 XML으로도 만들 수 있다고 했다.

먼저 자바로 만들어보자.

 

 

우선 저번에 자바 GUI에서도 공부했듯

화면에 보이는 뷰들의 참조변수는

가급적 멤버변수로 설정해야 한다.

 

이런 식으로 말이다.
(xml로 구현한 setContentView는 주석처리)

 

그리고 setContentView를 여러 개 쓰면

마지막 거만 적용이 된다.
(최신 버전은 여러 개 쓰면 에러가 남)

 

또 버튼이나 텍스트뷰 객체를 만들 때 

매개변수에 this를 넣어줘야 한다.

 

여러 개의 뷰를 배치하려면

Layout ViewGroup 클래스가 필요한데

그중에 가장 간단한

LinearLayout이라는 클래스를 객체로 만들어서 사용할 것이다.

 

 

setOrientation 은 이 리니어 레이아웃의 형태를

수평으로 할 건지 수직으로 할건지 정하는 것이다.

위에선 버티컬 (수직으로)로 해서

뷰들이 위에서 아래로 차례대로

나오게 된다.

 

그리고 

위위 사진은 hello world지만

위 사진은 nice to meet you로 바뀐 것처럼

리스너를 만들어서 버튼을 클릭 시

텍스트가 바뀌게 설정을 하였다.

 

 

 

 

2. XML로 setContentView 구현

 

이번엔 훨씬 더 간편한 XML로 구현을 해보겠다.

구현하기에 앞서

사진의 위의 부분은

뷰의 부모 클래스와

자식 클래스 트리를 보여주는 것이며

각 클래스에 속해있는 기능을 적어두었다.

 

그리고 아래의 뷰크기 값은

우리가 이제 뷰의 크기 등을 설정할 때

권장하는 단위를 말한다.

우리는 주로 dp라는 단위를 사용할 것이다.

이 외에도 wrap_content는 내가 사용하는

콘텐츠의 크기만큼 알아서 크기를

설정해 주는 것이며

match-parent는 사용가능한 나머지 전체

크기를 사용하는 것이다.

(그래서 만약 첫 번째 뷰에 모두 match-parent를 적용하면

모든 화면이 그 뷰로만 보이게 된다.)

 

하지만 글씨 크기 단위는

sp라는 단위를 사용한다.

 

우리는 아직 다른 레이아웃은 배우지 않았다.

따라서 모르는 레이아웃은 지워주자.

 

그리고 우리가 배운 LinearLayout을 작성해 주자.

 

그다음 TextView 부분을 다 제거한 다음

다시 작성해 주자.

이때 위에서 설명한

크기를 설정해줘야 한다.

 

우선 위의 사진처럼 width는 match_parent

height은 wrap_content로 설정해 주자.

그리고 text를 원하는 대로 입력할 수 있다.

 

 

그 외에도

글씨크기, 글씨색상, 스타일, 배경색상, 패딩, 마진등을 적용할 수 있다.

이때 textstyle을 볼드와 이탤릭 둘 다 하고 싶을 수 있다.

그때는 | (원화표시 키보드를 쉬프트와 누를 때 나오는 연산자)를 이용해서

둘 다 적용할 수 있다.

visible

visibility는 말 그대로 보이게 할 건지 아닌지를 정하는 속성이다.

visibile로 설정하면 

 위 사진처럼 안녕하세요 라는 텍스트가 잘 보이며

기본값이기도 하다.

반면 invisible로 설정하면

그 영역은 남아있지만

글자는 보이지 않게 된다.

하지만 gone으로 속성을 설정하는 순간

그 영역까지도 사라지게 된다.

 

gravity 정렬

텍스트 뷰에서 글자 정렬을 할 때

하는 속성으로 왼쪽, 오른쪽, 센터 등으로

설정가능하다.

오른쪽 정렬된 모습

 

 

layout_gravity 정렬

위에선 글자의 정렬을 알아봤다.

그러나 만일 텍스트 뷰 영역이 조금 하다면?

그리고 텍스트 뷰 영역 자체의 정렬을 하고 싶다면

layout_gravity로 설정할 수 있다.

위에 코드 사진을 보면 뷰의 크기를

위의 화면처럼 조절했는데

이 뷰 자체를 가운데 정렬한 것이 위의 모습이다.

 

 

 

그럼 이제 내가 원하는 폰트를 적용시켜 보자.

 

폰트를 적용시키기 위해선

스튜디오에 폰트 파일을 넣어줘야 한다.

그러기 위해서 스튜디오 좌측에 있는 폴더 목록 중

res를 오른쪽 버튼을 눌러

new- android Resource Directory를 누른다.

그다음 위와 같은 창이 나오면

Resource type을 폰트로 바꿔줘야 한다.

 

Resource type을 눌러서

위쪽으로 가면 font가 보이는데

선택해 주고 ok를 누르자.

그 후 내가 가져올 font 파일을 

컨트롤 c 해서 복사해 주자.

그리고 스튜디오

좌측에 만들어진 폰트파일을

누르고 컨트롤 v를 눌러준다.
(이때 폰트 이름이 대문자 거나 띄어쓰기가 있으면 안 된다.)

그 후 텍스트뷰 속성 중

 fontFamily를 입력하고

" " 안에 내가 가져온 폰트이름을 적으면 적용이 된다.

폰트 적용 결과 화면

 

 

 

 

 

이렇게 코딩을 하다 보면

text가 쓰여 있는 부분이

흰색 혹은 노란색으로 배경색이 되어 있을 것이다.

이유는 하드코딩이 되어있기 때문이다.
(하드코딩은 문자열을 xml에 바로 입력하는 방식)

 

그래서 좌측 res 폴더 안에

values라는 폴더 안을 보면 Strings라는 xml 파일이 있다.

위의 사진처럼 말이다.

한번 눌러서 들어가 보자.

 

strings.xml

파일에 들어가면

string name="app_name"이라고 되어 있는 파일이 보일 것이다.

이는 app_name이라는 참조변수 명으로

Ex02 TextView라는 문자열이 저장된 것이다.

 

여기서 우리는 <string을 써서

message라는 참조변수명을 가진

TextView에서 보여줄 문자열을 작성해 보자.

 

그리고 TextView로 돌아와서

text의 값을 @string/message로 입력해 주자.

그런데 많은 문자열들이

이렇게 표현되어 있는 경우

어떤 문자열이 쓰여있는지 알 수가 없다.

그땐 그 참조변수 명을 적은 곳 위에

마우스를 올려보면 알 수 있다.

또 다른 방법으로는 

그 부분에 커서를 두고

컨트롤과 -를 누르면

하드코딩 형태로 바뀌며

다시 컨트롤과 + 를 누르면

다시 참조변수 형태로 돌아온다.

 

 

 

 

그럼 아까 strings.xml 위에 있던

colors.xml에 대해서도 잠깐 알아보자.

이름에서도 알 수 있듯이

참조변수를 이용해 미리 컬러들의 값을

저장시켜 놓는 곳이다.

 

이렇게 미리 컬러들을 세팅해 놓는 것은 엄청 편한데

그 이유는 앱을 만들 때는 

미리 정해둔 컬러만 사용하기 때문이다.

 

예를 들어 앱을 만들 때

primay color, second color 들을

적용시켜야 하는 경우가 많을 텐데

그 컬러들의 코드를 하나하나 외울 수는 없다.

 

실제로 앱을 만들거나 프로젝트를 할 때

위의 사진처럼

미리 컬러 팔레트와 다크모드 혹은 일반모드일 때

컬러들을 정해놓고 시작한다.
(글씨체도 마찬가지이다.)

 

 

 

 

 

 

그리고 가상디바이스와

xml에서 보이는 디자인 쪽 화면이 다르다.

 

 

이를 맞춰주려면

디자인 화면 쪽 왼쪽 위에 보이는

눈 같은 버튼을 누르자.

그리고 Show System UI를 누르면 된다.

 

그럼 가상기기처럼 똑같은 화면으로 볼 수 있다.

 

 

다시 xml로 같은 기능을 만들어보자면

 

 

자바에서 코드를 작성할 때

class를 import 하여야 하는 경우가 많은데

import가 안 됐을 경우 위 사진처럼 빨간색으로 나타난다.

이때는 커서를 가져가서

alt + enter를 눌러주고

엔터를 누르면 import가 된다.

 

 

 

그리고 Oncreate method 안에

버튼을 눌렀을 때

바뀔 수 있게 코딩을 해야 하는데

이런 코딩은 Listener을 통해 할 수 있다.

원래대로라면

위의 사진처럼 listener 객체를 만들고

버튼에 리스너 객체를 넣어줘야 한다.

 

하지만 익명클래스를 이용해서

바로 만드는 방법도 존재한다.

2023.02.02 - [Android journey/Java] - Java #11 - Thread, runnable, 익명클래스, 동기화 (국비 23일 차)

 

Java #11 - Thread, runnable, 익명클래스, 동기화 (국비23일차)

오늘은 Thread에 대해서 주로 공부할 것이다. 목차 1. Thread 2. Runnable 3. 익명클래스 4. 동기화 5. 스레드의 기능들 1. Thread Thread - 작성된 코드를 실행하는 객체 - 동시에 여러 작업을 하고 싶을 때 쓰

d0ngurrrrrrr.tistory.com

 

 

 

그리고 스튜디오에서 res(리소스들)을 저장할 때

엄청 기발한 방법으로 저장한다.

창고관리자(Resources 객체)가

각각의 파일들을 장부를 만들어서 관리한다.

 

예를 들어 사진이 10개가 있다면

사진 하나씩에 번호를 부여해서 그 위치를 저장하는 방법이다. 

이 방법으로

쉽게 resource들을 불러올 수 있다.

그러려면 xml에서 작업 시 id를 부여해야 한다.

btn_retry라는 id 부여

이렇게 id를 부여하고

R.id.아이디명으로 불러올 수 있다.

이거 말고도 다른 폰트라든가 이미지 등을 

위의 방법으로 불러올 수 있다.

 

XML을 통해 버튼과 뷰들을 만들고

자바에서 이렇게 코딩을 하면

 

버튼을 눌렀을 때 뷰가 바뀌는 프로그램을 만들 수 있다.