XML 파일에서 뷰를 부풀린다는 것은 무엇을 의미합니까?


278

나는 안드로이드 개발에 익숙하지 않고 레이아웃 xml 파일에서 팽창 뷰에 대한 참조를 계속 접하게됩니다. 나는 개발 가이드를 봤고 검색했지만 여전히 그것이 의미하는 바를 이해할 수 없었습니다. 누군가가 매우 간단한 예를 제시 할 수 있다면 대단히 감사하겠습니다.

답변:


257

XML 레이아웃을 작성하면 Android OS에 의해 팽창 되어 기본적으로 메모리에 뷰 객체를 생성하여 렌더링됩니다. 암시 적 인플레이션 이라고 부릅 시다 (OS가보기를 팽창시킵니다). 예를 들어 :

class Name extends Activity{
    public void onCreate(){
         // the OS will inflate the your_layout.xml
         // file and use it for this activity
         setContentView(R.layout.your_layout);
    }
}

를 사용하여 뷰를 명시 적으로 부 풀릴 수도 있습니다 LayoutInflater. 이 경우 다음을 수행해야합니다.

  1. 의 인스턴스를 가져옵니다 LayoutInflater
  2. 팽창시킬 XML을 지정하십시오.
  3. 반품 사용 View
  4. 리턴 된보기로 컨텐츠보기 설정 (위)

예를 들어 :

LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4

24
팽창 = 렌더링이면 onDraw ()의 사용법은 무엇입니까?
PypeBros

@sylvainulg, R.id.view는 xml 요소의 속성을 변경하는 데 사용되며 팽창은 동일하게 수행 할 수 있습니다. 팽창은 특히 사용자 정의 뷰에서 유용합니다. 전체 xml 파일을 부풀리기 위해 익숙한 setContentView of Activity 클래스가 사용됩니다. View는 LayoutInflater object.inflate ()를 사용하여 각 View를 수동으로 팽창시켜야합니다. 활동에는 수명주기가 있습니다. 보기에는 그리기주기가 있습니다. inflater는 XML 파일에서 predifiend 레이아웃을 사용하는 대신 사용자 정의보기에 특히 유용합니다.
Sree Rama

@Cristian 제발, 당신은 여기 나에게 조언 / 아이디어를 줄 수 있다고 생각 하십니까 goo.gl/E37NSu
eddy

24
팽창이 렌더링이라고 생각하지는 않지만 팽창은 XML 파일 내용을 기반으로 메모리에 실제로 View 객체를 생성하는 것입니다. 팽창 후 뷰가 메모리에 표시되지 않아도됩니다.
Ahmed

1
@MattJ. 글쎄, 내 대답은 잘못 표현되었을 수 있습니다. 안드로이드는 것이다 팽창 뿐만 아니라 XML의 어딘가를함으로써보기를, 그러나 당신이 된 setContentView를 호출하거나 수동으로 레이아웃을 부풀려. findViewById뷰 를 호출 할 때 객체는 이미 메모리에 있으며 그렇게하는 유일한 이유는 특정 객체에 대한 참조를 얻는 것입니다 (변경하거나 데이터를 가져 오는 것).
Cristian

160

뷰를 "팽창화"한다는 것은 레이아웃 XML을 가져와 구문 분석하여 지정된 요소 및 해당 속성에서 뷰 및 뷰 그룹 객체를 생성 한 다음 해당 뷰 및 뷰 그룹의 계층 구조를 상위 뷰 그룹에 추가하는 것을 의미합니다. setContentView ()를 호출하면 XML을 읽은 후 작성된보기를 활동에 첨부합니다. LayoutInflater를 사용하여 다른 ViewGroup에 뷰를 추가 할 수도 있습니다. 이는 많은 상황에서 유용한 도구가 될 수 있습니다.


22
그것은 훨씬 더 정확한 설명처럼 들립니다.
PypeBros

4
나는 여전히 "인플레이션"용어 자체에 약간 혼동되어있다. (내가 무언가로 들어가는 공기를 막는 것을 막을 수 있다면). 그러나 이것이 도움이 될 것입니다. 우분투 터미널에서 압축 해제 프로그램을 실행하고 "inflating : X / Y / z.xml"이라는 용어를 발견했습니다. 나는 그것이 같은 개념이라고 생각합니다.
Ben Ogorek

6
이 경우 "팽창"은 프레임 워크가 XML에서 레이아웃 설명을 가져오고 실제 View 객체로 뷰 계층을 채우는 것을 의미합니다. 따라서 레이아웃을 채우는 의미에서 팽창합니다.
jjb

1
@FranciscoCorrales-물론입니다. 이런 종류의 것을 사용하는 가장 일반적인 것은 행을 채우려는 ListAdapter 와 같은 것입니다 . 나는 그것을 사용하여 LinearLayouts와 같은 것을 채우고 ListAdapter 접근 방식을 제안하지 않는 방식으로 일부 데이터 객체를 반복했습니다.
jjb

36

팽창 은 런타임시 활동에보기 (.xml)를 추가하는 프로세스입니다. listView를 만들 때 각 항목을 동적으로 부풀립니다. 버튼 및 텍스트보기와 같은 여러보기가있는 ViewGroup을 만들려면 다음과 같이 만들 수 있습니다.

Button but = new Button();
but.setText ="button text";
but.background ...
but.leftDrawable.. and so on...

TextView txt = new TextView();
txt.setText ="button text";
txt.background ... and so on...

그런 다음 위의 뷰를 추가 할 수있는 레이아웃을 만들어야합니다.

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

오른쪽 모서리에 버튼을 추가하고 하단에 텍스트보기를 추가하려면 많은 작업을 수행해야합니다. 먼저 뷰 속성을 인스턴스화 한 다음 여러 제약 조건을 적용합니다. 시간이 많이 걸립니다.

Android를 사용하면 간단한 .xml을 만들고 xml로 스타일과 속성을 디자인 한 다음 프로그래밍 방식으로 제약 조건을 설정하지 않고도 필요할 때마다 간단하게 확장 할 수 있습니다.

LayoutInflater inflater = 
              (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View menuLayout = inflater.inflate(R.layout.your_menu_layout, mainLayout, true);
//now add menuLayout to wherever you want to add like

(RelativeLayout)findViewById(R.id.relative).addView(menuLayout);

나는 인플레이션이 실제로 무엇인지 설명하는 방법을 좋아합니다.
다니엘

1
인플레이 트의 매개 변수 attachToRoot는 무엇을 의미합니까?
flz


5

여기에서 "보기 팽창"은 해당 xml 파일에 지정된보기를 그리는 layout.xml 파일을 가져오고 생성 된보기로 부모 viewGroup을 POPULATING (= 팽창)하는 것을 의미합니다.


4

인플레이션에 대한 평신도 정의는 XML 코드를 Java 코드로 변환하는 것입니다. 예를 들어 XML에 태그가있는 경우 OS에서 메모리에 해당 Java 객체를 작성해야하므로 팽창기는 XML 태그를 읽고 해당 객체를 Java로 작성합니다.


2

UI를 XML로 만들지 만 뷰 객체는 우리가 표시하는 것이므로 XML을 뷰 객체로 변환해야하므로 팽창은 xml을 뷰 객체로 변환하여 표시 할 수 있도록합니다.이를 위해 레이아웃 팽창기 서비스라는 서비스가 필요합니다 xml을 제공하면 변환됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.