Working of LayoutInflater | Android

The LayoutInflater takes XML file as an input and builds View objects from it. É justo entendermos o que LayoutInflater faz.

vamos ver o que LayoutInflater.inflate () document says and especially about attachToRoot.

boolean: Whether the inflated hierarchy should be attached to the root parameter? Se false, o root só é usado para criar a subclasse correta de LayoutParams para a janela de raiz no XML.

A idéia geral é essa: Se attachToRoot é definido como true e, em seguida, o arquivo de layout especificado no primeiro parâmetro é inflado e anexado ao ViewGroup especificado no segundo parâmetro.

quando attachToRoot é falso, o arquivo de layout do primeiro parâmetro é inflado e devolvido como uma vista. Significa que o root só é usado para criar a subclasse correta de LayoutParams para a janela de raiz(do primeiro parâmetro) no XML.

passar true for attachToRoot resulta em uma janela inflada de um arquivo de layout sendo adicionado ao grupo de visualização no local. Passar em false para attachToRoot significa que a vista criada a partir do ficheiro layout será adicionada ao grupo de visualização de alguma outra forma.

Vamos decompô-lo em dois cenários:

quebrá-lo para baixo

attachToRoot Definido para True

  • Imagine que especificado de um botão em um XML de layout de arquivo com a sua largura de layout e esquema de altura definida para match_parent.
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/action_attach_to_root_true"
android:id="@+id/button_ok">
</Button>
  • agora queremos programaticamente adicionar este botão a um LinearLayout dentro de uma atividade. No nosso LinearLayout variável de membro pai, podemos simplesmente adicionar o botão com o seguinte:
inflater.inflate(R.layout.view_button, mLinearLayout, true);
  • especificamos que queremos para inflar o Botão a partir de seu layout de arquivo de recurso; podemos, então, dizer o LayoutInflater que queremos para anexá-lo ao pai. Nossos parâmetros de layout são honrados porque sabemos que o botão é adicionado a um LinearLayout. O tipo de layout params do botão deve ser LinearLayout.LayoutParams.

2. anextoroot configurado para Falso

  • vamos dar uma olhada em quando você gostaria de definir anextoroot para falso. Neste cenário, a vista especificada no primeiro parâmetro de inflate() não é anexada ao grupo de visualização no segundo parâmetro neste momento. Recordar o nosso exemplo de Botão de mais cedo, onde queremos anexar um botão personalizado a partir de um arquivo de layout para o pai. Ainda podemos anexar nosso botão ao pai, passando em falso para attachToRoot – nós apenas adicioná-lo manualmente depois.
Button btnAttachToRootFalse = (Button) inflater.inflate(R.layout.view_button,parent,false);
parent.addView(btnAttachToRootFalse);
  • o exemplo falso attachToRoot requer um pouco mais de trabalho quando adicionamos manualmente a vista a um grupo de visualização. Adicionar o nosso botão ao nosso LinearLayout era mais conveniente com uma linha de código quando o attachToRoot era verdadeiro.
  • vamos olhar para alguns cenários que absolutamente exigem anextoroot para ser falso. As crianças de RecyclerView devem ser enchidas com adutoroot passado como falso. Os pontos de vista das crianças estão inflacionados no caso do doente mais idoso(). RecyclerViews, não nós, são responsáveis por determinar quando inflar e apresentar suas visões de crianças. O parâmetro attachToRoot deve ser falso sempre que não somos responsáveis por adicionar uma vista a um grupo de visualização.
  • existem alguns cenários em que você não terá um grupo de visualização raiz para passar em inflado(). Ao criar uma vista personalizada para um AlertDialog, você ainda não tem acesso ao seu pai.
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
LayoutInflater inflater = getActivity().getLayoutInflater();View rootView = inflater.inflate(R.layout.fragment_hello_dialog,null,false);builder.setView(rootView);
builder.setTitle("Alert");
builder.setPositiveButton("Ok", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});return builder.create();
  • neste caso, não faz mal passar em null para o grupo de visualização de raiz. Acontece que o AlertDialog iria anular qualquer LayoutParams para match_parent de qualquer maneira. No entanto, a regra geral é passar no Pai se você for capaz de fazê-lo.

para recapitular:

  1. se você tiver um pai para passar para o parâmetro ‘Root ViewGroup’, faça-o.
  2. tente evitar passar em null para o grupo de visualização raiz.
  3. passar em falso para o parâmetro attachToRoot quando não somos os responsáveis por anexar a Vista do nosso arquivo de layout ao seu grupo de visualização raiz.
  4. não passa em true para uma vista que já foi anexada a um grupo de visualização.
  5. vistas personalizadas são um bom caso de uso para passar em true para attachToRoot.Obrigado especial a Sean Farrel, sobre o seu maravilhoso artigo sobre LayoutInflater aqui eu tentei resumir em poucas palavras.

    Happy coding and writing about coding!Se achar isto útil, clique em 💚 abaixo. Siga – me para mais artigos sobre tecnologia.

You might also like

Deixe uma resposta

O seu endereço de email não será publicado.