O que significa aumentar a exibição de um arquivo xml?

278

Eu sou novo no desenvolvimento Android e continuo encontrando referências a Inflating views a partir de um arquivo xml de layout. Pesquisei no Google e procurei no guia de desenvolvimento, mas ainda não consegui entender o que significa. Se alguém pudesse fornecer um exemplo muito simples, seria muito apreciado.

Brendan Weinstein
fonte

Respostas:

257

Quando você escreve um layout XML, ele é inflado pelo sistema operacional Android, o que basicamente significa que será renderizado pela criação do objeto de exibição na memória. Vamos chamar isso de inflação implícita (o sistema operacional inflará a visualização para você). Por exemplo:

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);
    }
}

Você também pode aumentar as visualizações explicitamente usando o LayoutInflater. Nesse caso, você deve:

  1. Obtenha uma instância do LayoutInflater
  2. Especifique o XML para aumentar
  3. Use o retornado View
  4. Definir a exibição de conteúdo com a exibição retornada (acima)

Por exemplo:

LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4
Cristian
fonte
24
if inflate = rendering, qual é o uso de onDraw (), precisamente?
PypeBros
@sylvainulg, O R.id.view é usado para alterar os atributos do elemento xml e inflar pode fazer o mesmo. inflar é particularmente útil em visualizações personalizadas. Para aumentar o arquivo xml inteiro, é usada a classe familiar setContentView of Activity. Uma Visualização deve aumentar cada Visualização manualmente usando o LayoutInflater object.inflate (). Uma atividade tem um ciclo de vida. Uma Visualização possui um ciclo de desenho. inflater é particularmente útil com visualização personalizada em vez de usar o layout pré-amigo no arquivo XML.
Sree Rama
@Cristian Por favor, você acha que você poderia me dar alguns conselhos / ideias aqui goo.gl/E37NSu
Eddy
24
Eu não acho que inflar é renderizar um pouco inflável é a criação real do objeto View na memória com base no conteúdo do arquivo xml. Após o inflar, a tela ficará na memória não necessariamente visível.
Ahmed
1
@MattJ. Bem, minha resposta pode ser mal formulada. O Android aumentará a exibição não apenas com o XML em algum lugar, mas quando você chamar setContentView ou aumentar manualmente o layout. No momento em que você chama, findViewByIdos objetos de exibição já estão na memória, e a única razão para fazê-lo é obter uma referência a esse objeto em particular (para alterá-lo ou extrair dados dele).
Cristian
160

"Aumentar" uma visualização significa pegar o XML do layout e analisá-lo para criar os objetos de visualização e grupo de visualizações a partir dos elementos e seus atributos especificados e, em seguida, adicionar a hierarquia dessas visualizações e grupos de visualização ao ViewGroup pai. Quando você chama setContentView (), ele anexa as visualizações criadas pela leitura do XML à atividade. Você também pode usar o LayoutInflater para adicionar visualizações a outro ViewGroup, o que pode ser uma ferramenta útil em várias circunstâncias.

jjb
fonte
22
isso soa como uma descrição muito mais precisa para mim.
PypeBros
4
Ainda estou um pouco confuso com a terminologia "inflação". (Se eu pudesse parar de imaginar o ar entrando em algo). Mas talvez isso ajude: acabei de executar o programa de descompactação em um terminal Ubuntu e observei a terminologia: "inflating: X / Y / z.xml". Suponho que seja realmente o mesmo conceito.
Ben Ogorek
6
"Inflar" nesse caso significa que a estrutura está pegando a descrição do layout do XML e preenchendo a hierarquia de exibição com os objetos de exibição reais. Então, é inflável no sentido de preencher o layout.
JJB
1
@FranciscoCorrales - Claro. A coisa mais comum para a qual você usaria esse tipo de coisa é algo como um ListAdapter , no qual você deseja preencher uma linha. Eu o usei para preencher coisas como LinearLayouts, iterando sobre algum objeto de dados de uma maneira que não sugeria a abordagem ListAdapter.
JJB
36

Inflar é o processo de adicionar uma visualização (.xml) à atividade no tempo de execução. Quando criamos um listView, inflamos cada um de seus itens dinamicamente. Se queremos criar um ViewGroup com várias visualizações, como botões e visualização de texto, podemos criar da seguinte maneira:

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...

Em seguida, precisamos criar um layout no qual possamos adicionar as visualizações acima:

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

E agora, se queremos adicionar um botão no canto direito e uma exibição de texto na parte inferior, temos que fazer muito trabalho. Primeiro instanciando as propriedades da visualização e aplicando várias restrições. Isso consome tempo.

O Android facilita a criação de um .xml simples e o design de seu estilo e atributos em xml e, em seguida, basta inflá-lo onde for necessário, sem a necessidade de definir restrições programaticamente.

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);
Zar E Ahmer
fonte
Eu gosto de como você descreveu o que realmente é a inflação, mostrando como você faria isso manualmente.
Daniel
1
O que significa o parâmetro attachToRoot do inflate?
FLZ
Veja a resposta detalhada stackoverflow.com/questions/12567578/…
Zar E Ahmer 15/18
5

Acho que aqui "inflar uma vista" significa buscar o arquivo layout.xml, desenhando uma vista especificada nesse arquivo xml e POPULATING (= inflar) o viewGroup pai com a View criada.

Jaydeep Ranipa
fonte
4

Uma definição leiga para inflação pode ser converter o código XML em código Java. Apenas uma maneira de entender, por exemplo, se tivermos uma tag em XML, o SO precisará criar um objeto Java correspondente na memória, para que o inflatter leia as XMLtags e crie os objetos correspondentes em Java.

user3458211
fonte
2

Como transformamos a interface do usuário em XML, mas visualizamos objetos, é o que exibimos. Por isso, de alguma forma, precisamos converter xml em objetos de exibição para inflar significa que estamos convertendo xml em objetos de exibição para que possam ser exibidos. Para isso, precisamos de um serviço chamado layout inflator service e dê a ele um xml e ele será convertido para você.

Falcão
fonte