Para que serve o LayoutInflater
Android?
android
layout-inflater
android-inflate
user386430
fonte
fonte
Respostas:
Quando você usa uma visualização personalizada em um,
ListView
deve definir o layout da linha. Você cria um xml no qual coloca widgets do Android e, no código do adaptador, precisa fazer algo assim:Leia mais na documentação oficial .
fonte
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
é, embora explique onde usá-la. A resposta 1-down é melhor.A classe LayoutInflater é usada para instanciar o conteúdo dos arquivos XML de layout em seus objetos View correspondentes.
Em outras palavras, ele pega um arquivo XML como entrada e cria os objetos View a partir dele.
fonte
single_list_item.xml
arquivo para cada linha de aListView
. O uso desse arquivo XML é como um inflador?O que
LayoutInflator
faz?Quando iniciei a programação do Android, fiquei realmente confuso com
LayoutInflater
efindViewById
. Algumas vezes usamos um e outras vezes.LayoutInflater
é usado para criar um novo objetoView
(ouLayout
) a partir de um de seus layouts xml.findViewById
apenas fornece uma referência a uma exibição que já foi criada. Você pode pensar que você não criou nenhuma view ainda, mas sempre que você chamarsetContentView
emonCreate
, layout da atividade junto com seus subviews fica inflado (criado) nos bastidores.Portanto, se a visualização já existir, use
findViewById
. Caso contrário, crie-o com aLayoutInflater
.Exemplo
Aqui está um mini projeto que eu fiz, exibindo
LayoutInflater
efindViewById
em ação. Sem código especial, o layout fica assim.O quadrado azul é um layout personalizado inserido no layout principal com
include
(veja aqui para mais informações). Foi inflado automaticamente porque faz parte da exibição do conteúdo. Como você pode ver, não há nada de especial no código.Agora vamos inflar (criar) outra cópia do nosso layout personalizado e adicioná-lo.
Para inflar o novo layout de exibição, tudo o que fiz foi dizer ao inflator o nome do meu arquivo xml (
my_layout
), o layout pai ao qual desejo adicioná-lo (mainLayout
) e que na verdade não quero adicioná-lo ainda (false
) . (Eu também poderia definir o pai comonull
, mas os parâmetros de layout da visualização raiz do meu layout personalizado seriam ignorados.)Aqui está novamente em contexto.
Observe como
findViewById
é usado somente depois que um layout já foi inflado.Código Suplementar
Aqui está o xml para o exemplo acima.
activity_main.xml
my_layout.xml
Quando você precisa do LayoutInflater
RecyclerView
. (Veja essesRecyclerView
exemplos para obter uma lista ou uma grade .) É necessário aumentar um novo layout para cada item visível na lista ou grade.fonte
myLayout
é uma View, embora eu possa tê-la inflado como um RelativeLayout (consulte my_layout.xml). Depois de inflado, eu o adiciono como uma subvisão do pai LinearLayout (ou seja,mainLayout
).LayoutInflater.inflate () fornece um meio de converter um arquivo res / layout / *. Xml que define uma exibição em um objeto de exibição real, utilizável no código-fonte do aplicativo.
dois passos básicos: obter o inflador e depois inflar o recurso
Como você consegue o inflador?
Como você obtém a visualização assumindo que o arquivo xml é "list_item.xml"?
fonte
Aqui está outro exemplo semelhante ao anterior, mas estendido para demonstrar ainda mais os parâmetros e o comportamento dinâmico que ele pode fornecer.
Suponha que seu layout de linha do ListView possa ter um número variável de TextViews. Primeiro, você aumenta o modo de exibição do item base (como no exemplo anterior) e depois faz um loop adicionando dinamicamente TextViews em tempo de execução. Usando o android: layout_weight também alinha tudo perfeitamente.
Aqui estão os recursos do Layouts:
list_layout.xml
schedule_layout.xml
Substituir o método getView na extensão da classe BaseAdapter
Observe diferentes chamadas do método inflar:
fonte
Essa classe é usada para instanciar o arquivo XML de layout em seus
View
objetos correspondentes . Ele nunca é usado diretamente - usegetLayoutInflater()
ougetSystemService(String)
para recuperar umaLayoutInflater
instância padrão que já esteja conectada ao contexto atual e configurada corretamente para o dispositivo em que você está executando. Por exemplo:Referência: http://developer.android.com/reference/android/view/LayoutInflater.html
fonte
Inflar significa ler o arquivo XML que descreve um layout (ou elemento da GUI) e criar os objetos reais que correspondem a ele e, assim, tornar o objeto visível em um aplicativo Android.
Este arquivo pode ser salvo como date_time_dialog.xml :
Este arquivo pode ser salvo como date_time_picker.xml :
A
MainActivity
classe salva como MainActivity.java :fonte
O inflator faz
Ele pega um layout xml como entrada (digamos) e o converte no objeto View.
Por que é necessário
Vamos pensar em um cenário em que precisamos criar uma exibição de lista personalizada. Agora cada linha deve ser personalizada. Mas como podemos fazer isso. Não é possível atribuir um layout xml a uma linha de listview. Então, criamos um objeto View. Assim, podemos acessar os elementos nele (textview, imageview etc) e também atribuir o objeto como linha de listview
Portanto, sempre que precisarmos atribuir um objeto de tipo de exibição em algum lugar e tivermos nosso design xml personalizado, apenas o converteremos em objeto inflando-o e usá-lo.
fonte
LayoutInflater é uma classe usada para instanciar o arquivo XML de layout em seus objetos de exibição correspondentes que podem ser usados em programas Java. Em termos simples, existem duas maneiras de criar UI no Android. Um é uma maneira estática e o outro é dinâmico ou programaticamente. Suponha que tenhamos um layout simples main.xml com um
textview
e um daedittext
seguinte maneira.Podemos exibir esse layout de maneira estática,
Uma maneira dinâmica de criar uma visualização significa que a visualização não é mencionada em nosso main.xml, mas queremos mostrar isso em tempo de execução. Por exemplo, temos outro XML na pasta de layout como footer.xml
Queremos mostrar essa caixa de texto em tempo de execução na nossa interface principal. Então, aqui vamos inflar o text.xml. Veja como:
Aqui, usei getSystemService (String) para recuperar uma instância de LayoutInflater. Também posso usar getLayoutInflator () para aumentar, em vez de usar getSystemService (String) como abaixo:
fonte
Aqui está um exemplo para obter uma referência para a visualização raiz de um layout, inflá-lo e usá-lo com setContentView (visualização de exibição)
fonte
O inflator de layout é uma classe que lê a descrição da aparência xml e as converte em objetos View baseados em java.
fonte
minha lista de personalização espero ilustrar o conceito
fonte
LayoutInflater é um componente fundamental no Android. Você deve usá-lo o tempo todo para transformar arquivos xml em hierarquias de exibição.
fonte
LayoutInflater cria objetos View com base em layouts definidos em XML. Existem várias maneiras diferentes de usar o LayoutInflater, incluindo a criação de vistas personalizadas, inflando vistas de fragmento para vistas de atividade, criando caixas de diálogo ou simplesmente inflando um arquivo de layout para uma atividade.
Existem muitos conceitos errados sobre como o processo de inflação funciona. Eu acho que isso vem da falta de documentação para o método inflate (). Se você quiser aprender sobre o método inflate () em detalhes, escrevi um post sobre isso aqui:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
fonte
Inflate, na verdade, algum tipo de conversão para dados, visualizações, instâncias, para representação visível da interface do usuário. em seguida, integrando-o com um xml que você definiu, que informa como os dados devem ser representados na interface do usuário
fonte