J'ai étudié cette question, en se référant à la LayoutInflater docs et la création d'un petit échantillon de démonstration du projet. Les didacticiels suivants montre comment remplir dynamiquement une mise en page à l'aide de LayoutInflater
.
Avant de commencer à voir ce qu' LayoutInflater.inflate()
paramètres de ressembler à:
-
ressources: ID d'un XML disposition de ressources à charge (par exemple,
R.layout.main_page
)
-
racine: Facultatif vue d'être le parent de la hiérarchie (si
attachToRoot
est true
), ou simplement un objet qui fournit un ensemble d' LayoutParams
des valeurs de la racine de la hiérarchie (si attachToRoot
est false
.)
attachToRoot: Si le gonflés hiérarchie doit être rattaché à la racine de paramètre? Si la valeur est false, la racine est utilisée uniquement pour créer le bon sous-classe de la LayoutParams
pour la vue racine dans le fichier XML.
Retourne: La Vue de la racine de la gonflés hiérarchie. Si racine a été fourni et attachToRoot
est true
, c'est la racine; sinon, il est la racine de l'gonflé fichier XML.
Maintenant, pour l'exemple de mise en page et le code.
Page principale (main.xml
):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
Ajouté dans ce conteneur est séparé TextView, visible en tant que petit carré rouge si les paramètres de mise en page sont appliquées avec succès à partir de XML (red.xml
):
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="25dp"
android:layout_height="25dp"
android:background="#ff0000"
android:text="red" />
Maintenant, LayoutInflater
est utilisé avec plusieurs variations de paramètres d'appel
public class InflaterTest extends Activity {
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewGroup parent = (ViewGroup) findViewById(R.id.container);
// result: layout_height=wrap_content layout_width=match_parent
view = LayoutInflater.from(this).inflate(R.layout.red, null);
parent.addView(view);
// result: layout_height=100 layout_width=100
view = LayoutInflater.from(this).inflate(R.layout.red, null);
parent.addView(view, 100, 100);
// result: layout_height=25dp layout_width=25dp
// view=textView due to attachRoot=false
view = LayoutInflater.from(this).inflate(R.layout.red, parent, false);
parent.addView(view);
// result: layout_height=25dp layout_width=25dp
// parent.addView not necessary as this is already done by attachRoot=true
// view=root due to parent supplied as hierarchy root and attachRoot=true
view = LayoutInflater.from(this).inflate(R.layout.red, parent, true);
}
}
Les résultats réels de la variation des paramètres sont documentées dans le code.
SYNOPSIS: en Appelant LayoutInflater
sans spécifier la racine conduit à gonfler appel d'ignorer les paramètres de mise en page à partir du XML. L'appel de gonfler avec de la racine de pas égal null
et attachRoot=true
ne charger les paramètres de mise en page, mais renvoie la racine de l'objet nouveau, qui empêche d'autres modifications de la configuration de l'objet chargé (sauf si vous pouvez le trouver à l'aide de findViewById()
).
La convention d'appel vous avez probablement souhaitez utiliser est donc celui-ci:
loadedView = LayoutInflater.from(context)
.inflate(R.layout.layout_to_load, parent, false);
Pour aider avec les problèmes d'implantation, la hiérarchie de la visionneuse est fortement recommandé.