김호쭈
DevForYou
김호쭈
전체 방문자
오늘
어제
  • 분류 전체보기 (321)
    • • 데이터베이스(DB) (9)
      • __SQL__ (9)
    • •알고리즘(Algorithm ) (117)
      • 문제풀이 (99)
      • 스터디 (14)
      • 알고리즘 팁 (4)
    • •Compter Science (57)
      • Operating System (25)
      • Computer Network (1)
      • Computer Vision (16)
      • Artificial Intelligence (14)
      • Software Technology (1)
    • • 독서 (36)
      • Design Pattern (24)
      • 객체지향의 사실과 오해 (1)
      • Object Oriented Software En.. (11)
    • • 개발 (26)
      • React (3)
      • node.js (6)
      • Django (11)
      • Spring boot (6)
    • • 개발Tip (4)
      • GitHub (0)
    • •프로젝트 (2)
      • 물물 (2)
    • •App (54)
      • 안드로이드 with Kotlin (50)
      • 코틀린(Kotiln) (4)
    • •회고 (8)
    • •취준일기 (3)
    • • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • GitHubDesktop
  • KMU_WINK
  • 로컬저장소
  • 원격저장소
  • 깃허브데스크탑
  • local저장소
  • ㄱ
  • Remote저장소

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김호쭈

DevForYou

[안드로이드&코틀린] 계산기 만들기#4, 동적으로 View추가하기, xml View로 바꾸기, LayoutInflater, inflate,
•App/안드로이드 with Kotlin

[안드로이드&코틀린] 계산기 만들기#4, 동적으로 View추가하기, xml View로 바꾸기, LayoutInflater, inflate,

2022. 3. 19. 03:09

저번 포스팅을 첨부한다. runOnUiThread에 대해서 다뤘다. 

 

[안드로이드&코틀린] 계산기 만들기#3, runOnUiThread, 쓰레드에서 UI

저번 포스팅에서는 Room을 사용하는방법에 대해서 간단하게 정리했다. 이번에는 runOnUIThread에 대해서 정리해보도록 하겠다. [안드로이드&코틀린] 계산기 만들기#2, Room이란, Room사용하기, 안드로

devforyou.tistory.com

# 알게된 것

  • LayoutInflater 이용하여 xml 적용

 

## LayoutInflater를 왜 사용했어야 했는가?

계산 할때마다 동적으로 연산식과 연산결과가 ScrollLayout에 하나씩 추가되야 했다. 기존에 존재하는 View를 사용한 것이 아니다. 내가 정의한 디자인이 계속해서 생겨야 한다는 것인데, 저렇게 빨간 네모를 친 곳이 하나의 xml파일이다. activity_main.xml와 같이 만든 건데 그게 view처럼 생성되어 ScrollLayout에 하나씩 부착이 되어야 했다. 

정리해보자면, xml로 존재하는 res를 view로 만들어서 사용해야 했다.

## xml 만들기

그냥 평범하게 저 빨간 네모에 해당될 xml을 하나 만들었다.  -> history_row

// history_row.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_margin="5dp"
  xmlns:tools="http://schemas.android.com/tools">

주의 할점은 width나 height를 잘 생각하고 만들어야한다. 만약 둘다 match_parent했다면 history_row의 부모 layout에 가득차버리기 때문에 한개밖에 안보일 것이다.

inflate() 된 view의 layoutParams 속성은 실제 layout 에서 match_parent 라도, wrap_content 로 강제로 변경된다. (inflate 된 view는 parent 가 없어지기 때문에 강제로 wrap_content 시킨다.)

출처: https://yejinson97gaegul.tistory.com/entry/LayoutInflater란 

라고 한다. 그래도 난 찝찝하니까 속성은 줬다.

## LayoutInflater사용하기

val historyView = LayoutInflater.from(this).inflate(R.layout.history_row,null,false)
// history_row 뷰에 대해서 findViewById로 접근
historyView.findViewById<TextView>(R.id.expressionTextView).text = it.expression
historyView.findViewById<TextView>(R.id.resultTextView).text = " = ${it.result}"

//ScrollLayout -> LinsearLayout에 추가해줌
historyLinearLayout.addView(historyView)

일단 최종 코드는 위와 같다.

 

val historyView = LayoutInflater.from(this).inflate(R.layout.history_row,null,false)

// LayoutInflater.from(this)을 만들어 준 후
// inflate(R.layout.history_row,null,false)로 VIEW를 생성한다고 생각하면 된다.
// inflate( "리소스(xml)" ,"root" ,"attachToRoot")

 

inflate()를 통해서 view를 만들어 내게 된다.

inflate( "리소스(xml)" ,"root" ,"attachToRoot")으 인자가 들어가게 되는데

  1. resource :  xml의 파일을 정해줌
  2. root : 생성될 view의 부모를 명시해준다. 
  3. true이면 root의 자식으로 추가 된다. root가 없기때문에 false로 지정했다.

이렇게하면 해당 xml에 대한 view가 생성되고, 동작에 의해 동적으로 추가해줄 수 있다.

 

 

 

 


👇 구글 공식문서

 

LayoutInflater  |  Android Developers

 

developer.android.com

 

참고

 

[Android] LayoutInflater 알아보기

레이아웃 인플레이팅에 대해서 톺아보기

velog.io

 

 

안드로이드 LayoutInflater 사용법

LayoutInflater를 사용하는 방법과, 비동기적으로 LayoutInflater를 사용 하는 방법

medium.com

 

저작자표시 (새창열림)

'•App > 안드로이드 with Kotlin' 카테고리의 다른 글

[안드로이드&코틀린] 앨범만들기#2, 액티비티 생명주기, Activity LifeCycle, 안드로이드 라이프사이클 예제  (0) 2022.03.21
[안드로이드&코틀린] 앨범만들기#1, 코틀린 let, putExtra 여러개, 코틀린 timer, 안드로이드 animate(),  (0) 2022.03.21
[안드로이드&코틀린] 계산기 만들기#2, Room이란, Room사용하기, 안드로이드 데이터베이스  (0) 2022.03.19
[안드로이드&코틀린] 계산기 만들기#1, TableLayout, drawable 버튼 디자인, 안드로이드 기본 아이콘, 모달창 띄우기, SpannableStringBuilder, 문자열(String)에 함수 만들기  (0) 2022.03.19
[안드로이드&코틀린] 안드로이드 스레드#2, 스레드간 통신구현, Handler, Message  (0) 2022.03.18
    '•App/안드로이드 with Kotlin' 카테고리의 다른 글
    • [안드로이드&코틀린] 앨범만들기#2, 액티비티 생명주기, Activity LifeCycle, 안드로이드 라이프사이클 예제
    • [안드로이드&코틀린] 앨범만들기#1, 코틀린 let, putExtra 여러개, 코틀린 timer, 안드로이드 animate(),
    • [안드로이드&코틀린] 계산기 만들기#2, Room이란, Room사용하기, 안드로이드 데이터베이스
    • [안드로이드&코틀린] 계산기 만들기#1, TableLayout, drawable 버튼 디자인, 안드로이드 기본 아이콘, 모달창 띄우기, SpannableStringBuilder, 문자열(String)에 함수 만들기
    김호쭈
    김호쭈
    공부하고 정리하고 기록하기

    티스토리툴바