본문 바로가기
IoT 디바이스 활용/AndroidStudio

AndroidStudio - 화면 디자인 - 첫 번째 프로젝트 만들기, 화면 디자인, Button, TextView, ImageView, LinearLayout, Gradle 정보

by cooluk 2020. 10. 20.

화면 디자인

첫 번째 프로젝트 만들기

프로젝트 생성

image-20201016142140479

Crate New Project

 

image-20201016142449474

Empth Activity > Next

 

image-20201016143240067

Name : UIDesign

Minimum SDK : API 21 : Android 5.0 (Lolipop)

Finish

 

[cf] 최초 구성 시 관련 파일 다운로드로 시간이 다소 걸림 아래 상태바에서 진척도 확인

image-20201016143433079

Gradle ≒ pip

 

[참고] 세계 안드로이드 버전 점유율

image-20201016142755747

 

안드로이드 폰 > 설정 > 개발자 옵션 > USB 디버깅, USB를 통해 설치된 앱 확인 활성화



주요 파일 구성

  • AndroidManifest.xml
    • 앱 명세서
    • 권한 등록, 구성요소 등록
  • 소스
    • 프로그램 소스
      • 코틀린, 자바 등의 파일
    • 리소스 소스
      • 그림, 화면 레이아웃 xml 등의 파일
    • Gradle
      • 프로젝트 설정
      • 외부 라이브러리 의존성 관리

image-20201016144441169

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.uidesign">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.UIDesign">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

 

MainActivity.kt

package com.example.uidesign
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}

setContentView(R.layout.activity_main) : layout을 여러개 지정할 수 있다.



화면 디자인

res/layout/activity_main.xml

image-20201016145039269

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

실행

안드로이드 폰 USB 연결 - USB 디버깅 허용

image-20201016152542145

Android Studio

samsung SM-G965N : 핸드폰 UIDesing 앱 설치

Pixel_3a_API_30_x86 : 애뮬레이터 실행

image-20201016155213332

 

레이아웃 관리자

  • ConstraintLayout
    • 각 컴포넌트간의 제약조건에 따른 위치 배정
    • 디폴트 레이아웃
  • LinearLayout
    • 한쪽 방향 으로만 배치하는 레이아웃
  • RelativeLayout
    • 기준 컴포넌트에 대한 상대 위치로 배치
  • FrameLayout
    • 겹침이 가능한 레이아웃
  • TableLayout
  • GridLayout …

 

뷰 컴포넌트

  • 화면에 나타나는 개별 요소 객체
  • View 클래스
    • 모든 뷰 컴포넌트의 최상위 부모
  • 주요 속성
    • android:id
      • 뷰 컴포넌트의 ID
      • 프로그램에서 ID를 이용해 뷰 접근
    • android:layout_width
    • android:layout_height
      • 뷰의 폭과 높이
      • wrap_content : 내용물의 크기에 맞춤
      • match_parent : 부모 컴포넌트의 크기에 맞춤
      • 0dp : 허용된 제약조건에 맞춤
      • 절대값
    • android:text
      • 출력할 문자열
  • 수정은 GUI에서 또는 code에서 직접 수정

 

TextView의 ID 설정

  • TextView 선택 후 id 항목 입력

    image-20201016160244275
:
<TextView
android:id="@+id/txtNormal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
:



Button

  • 클릭할 수 있는 뷰 컴포넌트
  • click 이벤트 처리 가능
    • 액티비티에서 click 이벤트를 처리하도록 함

 

  • 실습 : 기존 TextVeiw를 삭제하고 Button을 추가

    image-20201016160458888

 

  • 실습 : id 배정 및 제약조건 설정

    image-20201016160557401

 

  • 실습 : 크기 설정, text 속성 설정

    image-20201016160648337

 

  • 실습 : 텍스트 색상, 배경 색상 지정

    • color 속성 검색 후 설정
    image-20201016160711828

 

  • 실습 : 텍스트 색상, 배경 색상 지정

    • color 속성 검색 후 설정
    image-20201016161805103
android:backgroundTint="#AE9393"
android:textColor="#FF0000"

 

res/layout/activity_main.xml

:
<Button
android:id="@+id/btnClick"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:backgroundTint="#AE9393"
android:text="Click"
android:textColor="#FF0000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>



TextView

실습: TextView 글자 크기 설정

  • android:textAppearance="@style/TextAppearance.AppCompat.Large"

    image-20201016163318828

 

EditText

  • 글자 입력을 위한 뷰 컴포넌트

    image-20201016163341106

 

  • inputType : 어떤 종류의 글자를 입력할 지 지정
    • email, number, textPassword 등
  • hint
    • 사용자가 입력전에 출력할 문자열
    • 사용자가 입력시작하면 사라짐
    • html의 placeholder와 동일
  • ems
    • layout_widht가 wrap_content일 경우 글자 입력전이라 크기 결정 못함
    • 지정한 글자 수의 크기만큼 폭을 가짐
  • maxLength
    • 최대 입력 가능한 문자수
  • lines
    • 화면에 보여줄 라인 수



ImageView

이미지 res/mipmap 에 넣는다.

  • Component Search에서 검색

    image-20201016163533517

 

  • drop 하는 순간 연결할 이미지 선택 대화 상자 출력 ImageView

    image-20201016163600503

 

  • 이미지 선택 후 설정되는 속성

    • tools:srcCompat="@tools:sample/avatars"
    • 추후 변경 가능
  • scaleType 속성

    • ImageView와 실제그림의 크기 차이가 발생할 때 어떻게 보여줄지 결정
      • 그림의 확대/축소/자르기 결정
    image-20201016171718994



실습

image-20201016173218425

:
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="64dp"
android:text="사용자 ID"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editTextTextPersonName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintBaseline_toBaselineOf="@+id/textView2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/textView2" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="32dp"
android:text="비밀번호"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<EditText
android:id="@+id/editTextTextPassword2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="110dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="227dp"
android:ems="10"
android:inputType="textPassword"
app:layout_constraintBottom_toTopOf="@+id/imageView3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/textView3"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="8dp"
android:text="확인"
app:layout_constraintEnd_toStartOf="@+id/button9"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPassword2" />
<Button
android:id="@+id/button9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="8dp"
android:text="취소"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/button7"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPassword2" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitCenter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPassword2"
app:srcCompat="@mipmap/moon" />
:

수평선 맞추기 : 우클릭 > Show Baseline > Drag&Drop

버튼 폭 맞추기 : 서로 제약, layout_width : 0dp


 

가로모드 layout 적용하기

  • layout 우클릭 > new > Layout Resource File

  • File name : activity_main

  • orientation > Landscape

image-20201020090837981

  • 모드 : Project Files → 물리적인 저장공간 확인

image-20201020091126850

  • 방향에 따라 자동 설정

image-20201020092335299



LinearLayout

  • 컴포넌트를 한쪽 방향으로만 배치

image-20201020094241654

- orientation 속성으로 결정
- horizontal : 가로 방향
- vertical: 세로 방향
![image-20201016164004077](https://github.com/cooluks2/iot/raw/master/02.device/AndroidStudioMD/01_%ED%99%94%EB%A9%B4_%EB%94%94%EC%9E%90%EC%9D%B8.assets/image-20201016164004077.png)

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity">
</LinearLayout>

 

  • android:orientation="horizontal"

    image-20201016164033710

 

  • android:orientation="vertical"

    image-20201016164108822

 

LinearLayout의 자식 뷰 속성

  • android:layout_weight
  • layout_width 또는 layout_height0dp여야 함
  • 비율에 맞춰 크기를 결정

 

실습

LinearLayout 이용

image-20201020094751982

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="22sp"
android:text="이름" />
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:ems="10"
android:inputType="textPersonName"
android:textSize="22sp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="22sp"
android:text="비밀번호" />
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:ems="10"
android:inputType="textPassword"
android:textSize="22sp"/>
</LinearLayout>
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:textSize="22sp"
android:text="로그인" />
</LinearLayout>



Gradle 정보

image-20201016173936038



댓글