Layout & Material Design

Park Jae Hong·2022년 8월 31일
0

💡 Layout & view

▪ conponent 란 ?

: 컴포넌트는 앱의 구성 단위이며, 컴포넌트 여러 개를 조합하여 하나의 앱을 만든다.

conponent 종류 (공식 문서 )

액티비티(Activity)

: 액티비티는 사용자와 상호작용하기 위한 진입점으로 즉, 애플리케이션에서 사용자에게 보여지는 화면을 담당하는 컴포넌트이다. 화면뿐만 아니라 화면에서 일어나는 사용자와의 상호작용도 액티비티가 관여한다.

  • 사용자가 현재 관심을 가지고 있는 사항(화면에 표시된 것)을 추적하여 액티비티를 호스팅하는 프로세스를 시스템에서 계속 실행하도록 합니다.

  • 이전에 사용한 프로세스에 사용자가 다시 찾을 만한 액티비티(중단된 액티비티)가 있다는 것을 알고, 해당 프로세스를 유지하는 데 더 높은 우선순위를 부여합니다.

  • 앱이 프로세스를 종료하도록 도와서 이전 상태가 복원되는 동시에 사용자가 액티비티로 돌아갈 수 있게 합니다.

  • 앱이 서로 사용자 플로우를 구현하고 시스템이 이러한 플로우를 조정하기 위한 수단을 제공합니다. (여기에서는 가장 기본적인 예시를 제시합니다.)


서비스(Service)

: 서비스는 여러 가지 이유로 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점으로 액티비티가 사용자와의 상호작용에 관여한다면, 서비스(Service)는 사용자가 볼 수 없는 백그라운드에서 작업을 하는 컴포넌트이다.
즉, 사용자가 아무런 상호작용을 하지 않으면서도 작업을 수행하고 싶을 때 필요한 컴포넌트가 서비스이다.

서비스는 백그라운드에서 항상 실행된 상태로 작업을 진행해야 한다. 따라서 서비스는 한 번 실행되면 종료되지 않고 계속 유지된다.


브로드캐스트 수신자(Broadcast Receiver)

: 브로드캐스트(Broadcast)란, 메시지를 여러 객체에 전달하는 것을 말한다.(1 대 다)
(❗ 유니캐스트(Unicast)는 1 대 1)

EX - 앱이 사용자에게 예정된 이벤트에 대해 알리는 알림을 게시하기 위한 알람을 예약할 경우, 그 알람을 앱의 Broadcast Receiver에 전달하면 알람이 울릴 때까지 앱을 실행하고 있을 필요가 없습니다. 대다수의 브로드캐스트는 시스템에서 발생합니다. 예컨대 화면이 꺼졌거나 배터리가 부족하거나 사진을 캡처했다고 알리는 브로드캐스트가 대표적입니다.

Broadcast 종류

ACTION_BOOT_COMPLETED

부팅이 끝났을 때 (RECEIVE_BOOT_COMPLETED 권한등록 필요)



ACTION_CAMERA_BUTTON

카메라 버튼이 눌렸을 때



ACTION_DATE_CHANGED

ACTION_TIME_CHANGED

폰의 날짜, 시간이 수동으로 변했을때 (설정에서 수정했을때)



ACTION_SCREEN_OFF

ACTION_SCREEN_ON

화면 on, off



ACTION_AIRPLANE_MODE_CHANGED

비행기 모드



ACTION_BATTERY_CHANGED

ACTION_BATTERY_LOW

ACTION_BATTERY_OKAY

배터리 상태변화



ACTION_PACKAGE_ADDED

ACTION_PACKAGE_CHANGED

ACTION_PACKAGE_DATA_CLEARED

ACTION_PACKAGE_INSTALL

ACTION_PACKAGE_REMOVED

ACTION_PACKAGE_REPLACED

ACTION_PACKAGE_RESTARTED

어플 설치/제거



ACTION_POWER_CONNECTED

ACTION_POWER_DISCONNECTED

충전 관련



ACTION_REBOOT

ACTION_SHUTDOWN

재부팅/종료



ACTION_TIME_TICK

매분마다 수신



android.provider.Telephony.SMS_RECEIVED

sms 수신 (RECEIVE_SMS 권한 필요)



출처: https://itmir.tistory.com/424 [미르의 IT 정복기]

콘텐츠 제공자(Content Provider)

: 애플리케이션 사이에 데이터 공유가 가능하도록 하는 컴포넌트이다. 내용 제공자를 통해 주소록에 접근하거나, 갤러리에 접근이 가능하다. 콘텐츠 제공자는 파일 시스템, SQLite 데이터베이스, 기타 스토리지 등을 관리 및 제공한다.

EX - Android 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공합니다.
적절한 권한을 가진 앱이라면 콘텐츠 제공자(예: ContactsContract.Data) 를 쿼리하여 특정한 인물에 대한 정보를 읽고 쓸 수 있습니다. 콘텐츠 제공자를 데이터베이스에 대한 추상화로 생각하기 쉽습니다.
이런 일반적인 사례에 대해 콘텐츠 제공자에 빌드된 API 및 지원이 많기 때문입니다.
다만 시스템 설계 관점에서 볼 때 핵심 목적이 서로 다릅니다.
시스템의 경우 콘텐츠 제공자는 URI 구성표로 식별되고 이름이 지정된 데이터 항목을 게시할 목적으로 앱에 진입하기 위한 입구입니다.
따라서 앱에서 URI 네임스페이스에 넣을 데이터를 매핑할 방식을 결정하고, 해당 URI를 다른 엔터티에 전달할 수 있습니다. 이를 전달받은 엔터티는 URI를 사용하여 데이터에 액세스합니다. 시스템이 이렇게 할 수 있는 데에는 앱 관리에 몇 가지 특별한 점이 있기 때문입니다.


ViewGroup 란 ?

: 위젯을 유연하게 배치하고 크기를 조정할 수 있는 보기 그룹

Q. ViewGroup(ConstraintLayout) 와 TextView 둘다 View를 상속을 받는데, ViewGroup 안에 다른 View 가 들어갈수 있고 TextView에는 들어갈수 없는가 ?
: ConstraintLayout은 ViewGroup을 상속 받고 있지만 내부적으로 View SparseArray을 만든다. 그래서 View 상속, ViewGroup 상속 여부는 크게 중요치 않고 내부적으로 사용할 수 있는 함수만 다르다.

❗ SparseArray ?
: integer 값을 Objects에 매핑하며, 일반 객체 배열과 달리 인덱스에 공백을 포함할 수 있는 배열. SparseArray는 자동 상자 키를 사용하지 않고 데이터 구조가 각 매핑에 대한 추가 항목 개체에 의존하지 않기 때문에 HashMap보다 메모리 효율성이 더 높다.


💡 ViewId & Listener

TextView 속성

  • autoLink : TextView를 링크 형태로 사용.
  • autoText : 텍스트 입력 시, 자동 오타 수정 기능 사용.
  • breakStrategy : TextView의 텍스트 줄넘김 정책 지정.
  • bufferType : getText() 함수로 리턴되는 버퍼 타입 지정.
  • capitalize : 알파벳 소문자 입력(표시) 시, 대문자로 자동 변환.
  • cursorVisible : 텍스트 입력 커서를 보일지 말지 여부 지정.
  • digits : TextView에 입력 가능한 문자 제한.
  • drawableBottom : 텍스트를 기준으로 아래쪽에 이미지 출력.
  • drawableEnd : 텍스트를 기준으로 끝 위치에 이미지 출력.
  • drawableLeft : 텍스트를 기준으로 왼쪽에 이미지 출력.
  • drawablePadding : 텍스트와 이미지 사이의 간격 설정.
  • drawableRight : 텍스트를 기준으로 오른쪽에 이미지 출력.
  • drawableStart : 텍스트를 기준으로 시작 위치에 이미지 출력.
  • drawableTint : drawable을 혼합하기 위한 색조(Tint) 지정.
  • drawableTintMode : drawable tint 혼합(blending) 모드 설정.
  • drawableTop : 텍스트를 기준으로 위쪽에 이미지 출력.
  • editable : 입력 가능 여부 지정.
  • editorExtras : 텍스트 입력기에 추가 데이터 제공. (텍스트 입력기 구현에 한정)
  • elegantTextHeight : elegant height metrics 플래그 켜기.
  • ellipsize : 텍스트 생략기호(...) 또는 텍스트 흐르는 효과 주기.
  • ems : EM 단위의 크기로 TextView의 고정 너비 설정.
  • fontFamily : TextView의 텍스트 폰트 설정.
  • fontFeatureSettings : Open Type 폰트(.otf)의 고급 설정 제어.
  • freezesText : TextView의 상태(텍스트, 커서 등) 유지.
  • gravity : TextView의 텍스트 정렬 방식 지정.
  • height : TextView의 고정된 높이 지정.
  • hint : TextView의 텍스트가 빈 상태일 때, 출력될 텍스트 설정.
  • hyphenationFrequency : '-'(hyphen)이 추가되는 빈도 설정.
  • imeActionId : 텍스트 입력기(IME) 액션 버튼이 눌려졌을 때의 이벤트 ID 지정.
  • imeActionLabel : 텍스트 입력기(IME) 액션 버튼에 표시될 라벨 텍스트 지정.
  • imeOptions : 텍스트 입력기(IME)의 표시 옵션 지정.
  • includeFontPadding : Font 위/아래 padding 사용 여부 설정.
  • inputMethod : 특정 유형의 입력 방법 지정.
  • inputType : 텍스트 입력기(IME)에서 입력 가능한 데이터 유형, 방법, 기능 지정
  • letterSpacing : 글자 간격 조절.
  • lineSpacingExtra : 텍스트 줄 간격 조절. (텍스트 높이 상관 없이 지정 값 설정)
  • lineSpacingMultiplier : 텍스트 줄 간격 조절. (텍스트 높이에 곱한 값 설정)
  • lines : 정확히 텍스트 줄 단위로 TextView 높이 설정.
  • linksClickable : 링크 클릭 시, 링크 연결 프로그램 실행 여부 지정.
  • marqueeRepeatLimit : marquee(텍스트 흐르는 효과) 애니메이션 반복 횟수 지정.
  • maxEms : TextView의 EM 단위 최대 너비 설정.
  • maxHeight : TextView의 최대 높이 지정.
  • maxLength : TextView의 텍스트 최대 길이 제한.
  • maxLines : TextView의 줄(line) 단위 최대 높이 지정.
  • maxWidth : TextView의 최대 너비 지정.
  • minEms : TextView의 EM 단위 최소 너비 설정.
  • minHeight : TextView의 최소 높이 지정.
  • minLines : TextView의 줄(line) 단위 최소 높이 지정.
  • minWidth : TextView의 최소 너비 지정.
  • numeric : 숫자만 입력 가능하게 만들기.
  • password : 입력되는 텍스트 감추기. (대신 '•'(password dot) 표시)
  • phoneNumber : 전화번호만 입력 가능하게 만들기.
  • privateImeOptions : 텍스트 입력기(IME)에 구현에 제한된(private) 옵션 지정.
  • scrollHorizontally : TextView 가로 스크롤 가능하게 만들기.
  • selectAllOnFocus : TextView가 Focus될 때, 자동으로 모든 텍스트 선택하기.
  • shadowColor : 텍스트 아래에 표시될 희미한 그림자 색상 지정.
  • shadowDx : 텍스트와 그림자 사이의 가로 방향(x 축) 간격 조절
  • shadowDy : 텍스트와 그림자 사이의 세로 방향(y 축) 간격 조절
  • shadowRadius : 그림자의 범위 조절.
  • singleLine : 텍스트가 한 줄로 출력되도록 강제.
  • text : 화면에 표시될 텍스트 지정.
  • textAllCaps : 텍스트를 모두 대문자로 출력.
  • textAppearance : color, typeface, size, style을 한번에 설정.
  • textColor : 텍스트 색상 설정.
  • textColorHighlight : 선택 텍스트의 배경 색상 설정.
  • textColorHint : hint 텍스트의 글자 색상 지정.
  • textColorLink : 링크로 사용되는 텍스트의 글자 색상 지정.
  • textIsSelectable : TextView의 텍스트 선택 가능하도록 만들기.
  • textScaleX : 텍스트 글자 너비 조절(늘리기/줄이기).
  • textSize : 텍스트 폰트 크기 설정.
  • textStyle : 텍스트 스타일(bold, italic) 지정.
  • typeface : 텍스트 폰트 typeface 설정.
  • width : TextView의 고정된 너비 지정..

Button 속성 & 기능

  • CompoundButton
    : 선택 및 선택 취소된 두 가지 상태가 있는 버튼. (버튼을 누르거나 클릭하면 상태가 자동으로 변경)

  • ImageButton
    : 사용자가 누르거나 클릭할 수 있는 이미지(텍스트 대신)가 있는 단추를 표시

  • RadioButton
    : 선택 또는 선택 취소할 수 있는 두 가지 상태 버튼입니다. radio button을 선택하지 않은 경우 사용자가 누르거나 클릭하여 확인할 수 있습니다. 그러나 CheckBox와 달리 radio button은 한번 선택되면 사용자가 선택 취소할 수 없습니다.

  • ToggleButton
    : 선택/선택 해제된 상태를 "라이트" 표시기가 있는 단추로 표시하며 기본적으로 "ON" 또는 "OFF" 텍스트가 함께 표시.

  • ZoomButton ( API 26 이상부터 사용가능 )
    : 이 위젯은 길게 누르는 이벤트를 설정된 빈도로 일련의 클릭으로 전환하기 위한 간단한 유틸리티를 제공합니다. 이 위젯에서 직접 처리하는 실제 '줌' 기능은 없습니다. 대신, 이 API의 클라이언트는 확대/축소 기능을 처리하기 위해 onClickListener를 설정해야 합니다. 사용자가 줌 버튼을 길게 누를 때마다 setZoomSpeed(길이)에 의해 결정된 주파수에 따라 클릭 청취기가 호출됩니다.

  • ZoomButtonsController ( API 26 이상부터 사용가능 )
    : 확대/축소 컨트롤을 표시하거나 숨기고 소유자 보기에 상대적으로 위치를 지정. 또한 클라이언트에 확대/축소 컨트롤 컨테이너에 대한 액세스 권한을 부여하여 확대/축소 컨트롤 창에 추가 액세서리 버튼을 표시할 수 있다.


💡 Material Design

주요 Material Components

더 자세한 내용은 공식홈페이지 확인 ❗


Material Theme

: theme.xml에서 사용

Color

  • Primary : 기본 color

  • colorSecondary
    : 앱에서의 두번째 브랜딩 색상 (secondary branding color), 주로 주요 브랜딩 색상(colorPrimary)을 좀 더 돋보이게 하기 위해서 사용 함

  • colorOn[Primary, Secondary, Surface etc]
    : 각 이름들의 색상에 대비되는 색상

  • color[Primary, Secondary]
    : Variant 각 이름들의 색상의 그림자

  • colorSurface
    : 컴포넌트(카드, 시트, 메뉴 등)의 표면 색상.

  • colorBackground
    : 스크린의 백그라운드.

  • colorPrimarySurface
    : 라이트 테마에서는 colorPrimary이고, 다크테마에서는 colorSurface를 나타내는 색상.

  • colorError
    : 에러를 표시하기 위한 색상.

❗ 그 외 유용한 색상.

  • colorControlNormal
    : 아이콘 및 컨트롤의 보통 상태에 적용되는 색상.

  • colorControlActivated
    : 아이콘/컨트롤이 활성화 상태일 때(예를 들어 체크박스가 체크되었을 때) 적용되는 색상

  • colorControlHighlight
    : 컨트롤을 강조할 때 적용되는 색상(예를 들어 리플, 리스트에서 선택된 것)

  • textColorPrimary
    : 가장 눈에 띄어야 할 텍스트 색상

  • textColorSecondary
    : 두번째 텍스트 색상.


Pixel Density

  • 크기 단위 : px(pixel), dp(density independent pixel), sp(scale independent pixel - 글자 크기에 사용)

❗ View를 참조 할 때?

  • findViewByid

  • viewBinding

  • dataBinding

참고 : https://lotuslee.tistory.com/114, https://hckim999.tistory.com/33

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글