안드로이드&IOS 앱 개발자 양성

안드로이드&IOS 앱 개발자 양성(70일차)

HRuler 2020. 7. 15. 17:58
더보기

** 대다수의 GUI Programming의 방식

** 문자열을 정수로 변환하는 알고리즘

** LinearLayout : View를 수직 또는 수평 방향으로 배치하는 레이아웃

** RelativeLayout

** FrameLayout
1. 출력할 이미지를 res/drawable 디렉토리에 복상
2. 레이아웃 파일을 수정

** TableLayout

** GridLayout

** ConstraintLayout

** ScrollView

** LinearLayout과 FrameLayout을 이용해서 버튼을 누르면 화면에 출력되는 내용을 변경
1. 실행가능한 액티비티를 추가
2. 레이아웃 수정
3. Activity.java 파일에 인스턴스 변수 선언
4. Activity.java 파일의 onCreate 메소드에 저장

** TabHost
1. 3개의 구조
2. 생성
3. 실습 - 3개의 화면을 가진 탭을 생성

** SlidingDrawer
1. 실행 가능한 Activity를 생성
2. layout 수정

** 사용자 알림

** 진동
1. 퍼미션을 설정할 때는 manifest.xml 파일에서 application 태그 외부에 설정
2. 진동 설정

** 소리
1. 안드로이드에 내장된 사운드
2. 사용자 사운드

** 알림 실습
1. 사운드 파일을 저장할 raw 디렉토리를 res 디렉토리에 생성
2. raw 디렉토리에 효과음으로 사용할 사운드 파일을 복사
3. 진동을 사용하기 위한 권한을 설정
4. 실행 가능한 Activity를 추가
5. 레이아웃을 수정
6. Activity.java의 onCreate 메소드 작성

** 대다수의 GUI Programming의 방식

- 디자인을 위한 파일과 이 디자인을 동적으로 제어하는 파일을 pair로 제공하는 경우가 많다.

  디자인하는 파일에 직접 코드를 작성할 수 있는 방법과 컴포넌트를 드래그 앤 드랍을 이용해서 배치한 후 조정하는 방식을 제공한다.

 

** 문자열을 정수로 변환하는 알고리즘

String str = "123";

int result = 0;

for(int i = 0; i < str.length; i = i + 1){

   char ch = str.charAt(i);

   result = result * 10 + (ch - 48);

}

 

** LinearLayout : View를 수직 또는 수평 방향으로 배치하는 레이아웃

 

** RelativeLayout

- 위젯과 부모와의 위치 또는 위젯끼리의 관계를 이용해서 배치하는 레이아웃 첫 번째 위젯은 부모와의 관계로 배치를 하고 두 번째 위젯부터는 다른 위젯과의 관계를 이용해서 배치한다.

  자바코드에서 사용하지 않는 위젯이라도 다른 위젯과의 관계를 위해서 id를 설정

- 레이아웃도 위에서 아래로 읽기 때문에 기준이 되는 위젯을 먼저 생성

<RelativeLayout>

       <View android:id="@+id/a"/>

       <View layout_above="@id/a"/>    //이 View는 a의 위에 생성

</RelativeLayout>

- layout_로 시작하는 속성으로 배치

  left 대신에 start를 사용할 수 있음 : toLeftOf 대신에 toStartOf가 가능하다.

  right 대신에 end를 사용할 수 있다.

- to 대신에 align으로 시작하면 맞춤을 설정한다.

- alignParent로 시작하면 부모 뷰를 기준으로 맞춤을 설정한다.

- layout 파일을 수정

 

 

 

** FrameLayout

- 하위 뷰를 무조건 왼쪽 상단을 기준으로 배치

- 2개 이상의 하위 뷰를 배치하면 겹쳐서 출력한다.

- 실행 중에 addView나 removeView를 이용해서 하위를 추가하거나 삭제할 수 있다.

- 하위 뷰의 출력 속성을 조절해서 보이고 보이지 않게 할 수도 있다.

  이 때는 visibility라는 속성을 이용하고 View 클래스의 상수로 설정한다.

- FrameLayout으로 이미지 뷰와 버튼을 배치

1. 출력할 이미지를 res/drawable 디렉토리에 복사

2. 레이아웃 파일을 수정

 

 

 

** TableLayout

- 테이블을 만들어서 배치하는 레이아웃

- TableRow 태그를 이용해서 행을 생성하고 그 안에 위젯을 배치

- 행의 높이는 무조건 wrap_content

- 너비는 무조건 match_parent

  하나의 셀에 하나의 View만 배치가 가능하다.

  하나지만 Layout을 배치하면 여러 개의 위젯도 가능하다.

- 각 셀에 배치되는 위젯의 높이와 너비를 설정하지 않는다.

 

** GridLayout

- 테이블 구조로 뷰를 배치

- layout_columnSpan이나 layout_rowSpan 속성을 이용해서 여러 개의 열이나 행을 합쳐서 하나의 셀을 생성하는 것이 가능하다.

- 계산기 모양 : LinearLayout과 GridLayout 이용

 

 

** ConstraintLayout

- RelativeLayout처럼 다른 위젯과의 관계를 이용해서 배치를 하는 옵션이 조금 더 다양하고 parent의 위치를 기준으로 배치한다.

- Margin의 옵션이 다양 : 일반 Margin 외에 goneMargin으로 뷰가 사라졌을 때의 마진을 별도로 설정할 수 있다.

 

** ScrollView

- 자식 뷰가 부모 뷰의 크기보다 큰 경우 그냥 배치하면 부모 뷰의 영역을 넘어선 부분은 출력되지 않는다.

  스크롤이 가능한 뷰를 만들고 그 안에 자식 뷰를 추가해야 한다.

  ScrollView는 하나의 자식 뷰만 갖는다.

- 수직 방향의 스크롤이 가능한 뷰이고 좌우 스크롤이 가능한 View는 HorizontalScrollView이다.

- ListView, MapView, WebView 등은 ScrollView의 하위 클래스라서 기본적으로 스크롤이 구현되어 있다.

  이 클래스들은 재사용 가능한 Deque 자료구조를 이용한다.

 

** LinearLayout과 FrameLayout을 이용해서 버튼을 누르면 화면에 출력되는 내용을 변경

- View를 변경해서 화면 전환

- 버튼을 3개 배치해서 3개의 화면을 전환

1. 실행 가능한 액티비티를 추가

2. 레이아웃 수정

 

 

3. Activity.java 파일에 인스턴스 변수 선언

 

 

4. Activity.java 파일의 onCreate 메소드에 저장

 

 

 

** TabHost

- 탭을 만들기 위한 레이아웃

  1, 3개의 구조

  TabHost : 탭 전체 영역

  TabWidget : 탭 버튼 영역
  FrameLayout : 탭 버튼을 눌렀을 때 보여질 영역

2. 생성

- TabHost를 이용해서 전체 영역을 생성

- TabHost 영역 안에 LinearLayout을 이용해서 TabWidget 영역을 생성하고 FrameLayout을 생성한다.

- java 코드에서 TabHost.TabSpec을 생성해서 아이콘 모양을 생성하고 출력할 영역을 지정해서 사용

3. 실습 - 3개의 화면을 가진 탭을 생성

1) 각 탭에 사용할 icon 이미지를 프로젝트에 추가

2) 실행가능한 Activity를 추가

 

 

3) Activity.java 파일의 onCreate 메소드에 추가

 

 

 

** SlidingDrawer

- 핸들을 터치하면 다른 뷰가 펼쳐지듯이 아래에서 위로 출력되는 레이아웃

- handle 속성에 터치할 핸들을 지정하고 content 속성에 펼쳐질 뷰를 설정

- SlidingDrawer를 처음에 핸들만 출력되고 핸들을 누르면 content가 출력되고 출력된 상태에서 다시 핸들을 누르면 content가 사라진다.

  별도의 코드없이 layout 만으로 생성한다.

- 최근에는 이러한 작업을 Dialog를 이용하여 하는 것을 권장한다.

1. 실행 가능한 Activity를 생성

2. layout 수정

 

 

** 사용자 알림

- 사용자에게 특수한 상황 발생을 알리는 방법

  진동

  소리(시스템 사운드, 사용자 사운드)

  텍스트(토스트, 스낵바, 대화상자) : 토스트와 스낵바는 시스템에 종속적이고 대화상자는 애플리케이션에 종속 - 토스트와 스낵바는 애플리케이션이 종료되도 출력이 가능하지만 대화상자는 애플리케이션이 종료되면 같이 종료된다.

 

** 진동

- 진동을 사용하려면 퍼미션이 필요하다.

1. 퍼미션을 설정할 때는 manifest.xml 파일에서 application 태그 외부에 설정

  진동은 <uses-permission android:name="android.permission.VIBRATE"/>

2. 진동 설정

1) 1번만 사용

Vibrator 변수 = (Vibrator)getSystemService(VIBERATOR_SERVICE);

변수.vibrate(진동시간);    //시간은 1/1000초 단위

2) 여러 번 사용

변수.vibrate(long [] int count);

- 첫 번째 매개변수는 대기시간과 진동시간의 배열

  짝수 개로 대입하게 되는데 홀수 번째가 대기 시간이고 짝수 번째가 진동시간

- 두 번째 매개변수는 진동 횟수 

** 소리

1. 안드로이드에 내장된 사운드

  Uri 변수 = RingtoneManager.getDefaultUri(RingtoneManage.TYPE_NOTIFICATION);

  //NOTIFICATION 대신에 ALAM이나 RINGTONE 사용 가능

  Ringtone 링톤변수명 =RingtoneManager.getRingtone(getApplicationContext().변수);

  링톤.play();

- 안드로이드에서 getApplicationContext()는 시작하는 Activity의 참조를 리턴한다.

  모든 Activity에서 저 메소드를 호출하면 시작하는 Activity의 참조를 얻어낼 수 있다.

2. 사용자 사운드

- 사운드를 raw 디렉토리에 저장해서 resource로 만든다.

  MediaPlayer 미디어플레이어 = MediaPlayer.create(Context context, R.raw.사운드ID);

  미디어플레이어.start();

- Context(문맥) : 데이터를 저장하고 있는 것을 Context라고 하는데, 그림을 그릴 때는 그리기를 위한 정보를 저장하고 있는 것을 Context라고 한다.

  안드로이드에서도 화면에 무엇인가를 출력하고자 하면 반드시 Context 정보가 있어야 한다.

  Activity가 Context를 구현한 클래스이다.

  Context 대신에 Activity를 대입해주면 된다.

 

** 알림 실습

1. 사운드 파일을 저장할 raw 디렉토리를 res 디렉토리에 생성

- 안드로이드에서 기본적인 리소스(이미지, 레이아웃, 색상, 스타일, 문자열, 배열 등)를 제외한 이진 파일은 raw 디렉토리에 배치

2. raw 디렉토리에 효과음으로 사용할 사운드 파일을 복사

- buttoneffect.wav

3. 진동을 사용하기 위한 권한을 설정

- manifest.xml 파일에서 application 태그 외부에 작성

 

 

4. 실행 가능한 Activity를 추가

5. 레이아웃을 수정

 

 

6. Activity.java의 onCreate 메소드 작성