본문 바로가기

분류 전체보기134

09-3 폰 크기의 호환성 안드로이드 폰은 크기가 다양해서 개발자에게는 크기가 다양한 기기와 호환하는 화면을 만드는 것이 중요한 과제이다. 폰 크기와 호환성은 안드로이드 시스템에서 도와주는 부분이 있고 개발자가 직접 코드에서 해결해야 하는 부분이 있다. 우선 안드로이드 시스템에서는 기기의 크기를 어떻게 판단하는지 살펴보자. 논리적인 단위 알아보기 안드로이드 시스템은 기기의 크기를 ldpi, mdpi, hdpi, xhdpi, xxhpi, xxxhdpi로 구분한다. 여기서 dpi는 dots per inch의 줄임말로 1인치 안에 있는 도트의 개수를 의미한다. 안드로이드 시스템은 기기의 크기를 구분하여 콘텐츠의 크기를 늘리거나 줄여서 그에 맞게 나올 수 있도록 돕는다. 그런데 그러려면 개발자가 콘텐츠의 크기를 지정할 때 논리적인 단위를.. 2023. 6. 23.
09-2 리소스 조건 설정 리소스 조건 설정이란? 어떤 리소스를 특정 환경에서만 적용되도록 설정하는 것을 말한다. 왜 필요한가? 만약 기기에 앱을 설치하면 바탕화면에 앱을 실행하는 실행 아이콘이 나온다. 앱을 개발할 때 이 실행 아이콘에 해당하는 이미지를 리소스 디렉터리 mipmap에 준비한다. 그런데 만약 이미지를 하나만 준비했는데 기기마다 화면 크기가 달라지면 선명하게 나오지 않는 문제가 발생한다. 그러므로 개발자는 아이콘이 선명하게 나오게 하기 위해 이미지를 기기에 맞는 크기로 여러 장 준비한다. 보통 5장 정도. 그런데 문제는 이미지를 어느 기기의 크기에 적용하는지를 어떻게 결정할 것인가이다. 이 작업을 코드에서도 할 수 있지만 프로그램이 복잡해지고 리소스를 사용하는 목적과도 맞지 않는다. 이때 리소스 조건을 이용한다. 즉.. 2023. 6. 23.
09-1 리소스의 종류와 특징 안드로이드 프로그래밍은 리소스를 많이 이용한다는 특징이 있다. 9장에서는 리소스의 종류와 활용 조건을 어떻게 명시하는지, 기기의 크기와 호환하는 앱을 개발하려면 어떤 부분을 신경 써야 하는지에 초점을 맞춰 학습해야 한다. 안드로이드 앱 개발에서 리소스(resource)란 정적인 자원이라고 할 수 있다. 변경되지 않는 정적인 콘텐츠는 코드에 작성하지 않고 리소스로 분리해서 외부 파일로 만들어 코드를 좀 더 간결하게 작성하고 프로그램의 유지,보수를 용이하게 할 수 있다. 앱에서 이용하는 리소스는 크게 앱 리소스와 플랫폼 리소스로 구분된다. 차례대로 알아보자. 앱 리소스 활용하기 앱 리소스란 개발자가 직접 추가한 리소스를 의미한다. 앱을 개발하기 위해 모듈을 만들면 자동으로 res라는 디렉터리가 생기고 그 아.. 2023. 6. 23.
08-2 뷰 이벤트 액티비티의 화면은 TextView, EditText, ImageView, Button 등의 뷰로 화면을 구성하고 구현한다. 이런 뷰를 사용자가 터치했을 때 이벤트 처리는 앞에서 살펴본 터치 이벤트를 이용하지 않는다. 각 뷰에서 이벤트를 별도로 제공한다. ❓뷰의 이벤트도 결국 터치 아닌가요? 왜 터치 이벤트로 처리하지 않고 뷰에서 별도로 이벤트를 제공하죠? ❗️한 화면에 뷰가 많으면 뭘 터치했는지 좌표값을 알아야 한다(체크박스인지 버튼인지 등). 그래서 뷰가 많을 때는 프로그래밍이 복잡해진다. 그 대신 각 뷰가 제공하는 별도의 이벤트, 예를들어 버튼은 ClickEvent, 체크박스는 CheckdChangeEvent, 리스트는 ItemClickEvent로 처리하면 더 간단하고 명료해진다. 따라서 대부분의 뷰.. 2023. 6. 23.
08-1 터치와 키 이벤트 터치 이벤트 앱의 화면에서 발생하는 사용자 이벤트는 터치(touch)이다. 터치란 손가락으로 화면을 잠시 눌렀다가 떼는 행위를 말한다. 앱은 사용자의 터치를 인식하고 화면을 손가락으로 눌렀는지, 떼었는지, 스와이프(swipe, 화면에 손가락을 댄 상태로 쓸어넘기는 동작)했는지 따라 알맞게 동작하도록 구현한다. 이처럼 앱의 화면에서 발생하는 사용자의 터치 이벤트를 처리하고 싶다면 액티비티 클래스에 터치 이벤트의 콜백 함수인 onTouchEvent()를 선언하면 된다. ✅콜백함수란? 어떤 이벤트가 발생하거나 시점에 도달했을 때 자동으로 호출하는 함수. // 터치 이벤트 처리 class MainActivity : AppCompatActivity() { // 액티비티 클래스에 (...생략...) override.. 2023. 6. 22.
07-5 계층 구조로 배치 - ConstraintLayout ConstraintLayout은 안드로이드 플랫폼이 아니라 androidx에서 제공하는 라이브러리이다. 이를 이용하는 방법은 다음과 같다. 먼저 build.gradle 파일의 dependencies에 다음처럼 implementation을 선언해야 한다.(실제로는 자동으로 추가된다.) // constraintlayout 사용을 위한 빌드 설정 implementation 'androidx.constraintlayout:constraintlayout:2.1.1' 또한 프로젝트를 만들때 자동으로 만들어지는 레이아웃 XML 파일을 보면 기본 레이아웃이 ConstraintLayout으로 설정된다. 물론 수정할 수 있다. 카카오톡 화면을 만들어보자 레이아웃 편집기에서 레이아웃 구성하기 ConstraintLayout은.. 2023. 6. 20.
07-4 표 형태로 배치 - GridLayout GridLayout 배치 규칙 GridLayout은 행과 열로 구성된 테이블 화면을 만드는 레이아웃 클래스이다. LinearLayout처럼 orientation 속성으로 가로나 세로 방향으로 뷰를 나열하는데 LinearLayout과 다르게 줄바꿈을 자동으로 해준다. orientation: 방향 설정 rowCount: 세로로 나열할 뷰 개수 columnCout: 가로로 나열할 뷰 개수 GridLayout 역시 LinearLayout처럼 orientation 속성으로 방향을 설정하고 그 방향대로 뷰를 나열한다. 그런데 rowCount나 columnCount 속성에 설정한 개수만큼 뷰를 추가하면 자동으로 줄바꿈하여 그 다음 줄에 뷰를 출력한다. GridLayout에 orientation 속성을 가로로 지정하고.. 2023. 6. 20.
07-3 겹쳐서 배치 - FrameLayout FrameLayout이란? 뷰를 겹쳐서 출력하는 레이아웃 클래스이다. 카드를 쌓듯이 뷰를 추가한 순서대로 위에 겹쳐서 계속 출력한다. 다음은 FrameLayout에 버튼과 이미지를 추가한 예이다. // FrameLayout에 버튼과 이미지 추가 실행해보면 버튼 위에 이미지가 겹쳐나온다. FrameOut은 LinearLayout처럼 가로세로 방향으로 배치하지 않으며 RelativeLayout처럼 상대 위치를 조절하는 속성도 없다. 단순히 겹쳐서 출력하는 레이아웃이므로 특별한 속성도 없다. 똑같은 위치에 여러 뷰를 겹쳐서 놓고 어떤 순간에 하나의 뷰만 출력할 때 사용한다. 따라서 대부분 뷰의 표시 여부를 설정하는 visibility 속성을 함게 사용한다. // visibility 속성 사용 android:v.. 2023. 6. 20.
07-2 상대 위치로 배치 - RelativeLayout RelativeLayout 배치 규칙 RelativeLayout은 상대 뷰의 위치를 기준으로 정렬하는 레이아웃 클래스이다. 즉, 화면에 이미 출력된 특정 뷰를 기준으로 방향을 지정하여 배치한다. 이때 다음 속성을 사용하며 각 속성에 입력하는 값은 기준이 되는 뷰의 id이다. android:layout_above: 기준 뷰의 위쪽에 배치 android:layout_below: 기준 뷰의 아래쪽에 배치 android:layout_toLeftOf: 기준 뷰의 왼쪽에 배치 android:layout_toRightOf: 기준 뷰의 오른쪽에 배치 다음은 RelativeLayout에 이미지 뷰와 버튼을 배치한 예이다. // RelativeLayout으로 뷰 배치하기 2023. 6. 19.
07-1 선형으로 배치 - LinearLayout // 실습하다가 책이 최신버전 안드로이드스튜디오랑 살~짝 달라서 이론만 공부하고 실습은 나중에 몰아서 해보도록 할게요 7장에서는 뷰를 화면에 적절하게 배치하는 방법을 다룬다. 이때 뷰를 배치하는 클래스를 레이아웃 클래스라 한다. 06장에서 다루었듯, 레이아웃 클래스는 화면을 독자적으로 출력하지 않고 다른 뷰 객체를 포함하는 일종의 그릇 역할을 한다. 안드로이드가 제공하는 레이아웃 클래스는 저마다 뷰를 배치하는 규칙이 있다. 지금부터 대표적인 레이아웃 클래스 5가지를 살펴보자. LinearLayout 배치 규칙 LinearLayout은 뷰를 가로나 세로 방향으로 나열하는 레이아웃 클래스이다. orientation이라는 속성에 horizontal이나 vertical값으로 방향을 지정한다. // LinearL.. 2023. 6. 19.