J'ai une vue FrameView créée dans ma mise en page XML et, dans mon code, j'essaie de créer une série de nouveaux ImageViews et de les ajouter en tant qu'enfants de cette FrameView. Les ImageViews sont petits, seulement environ 15 pixels carrés, et je veux qu'ils apparaissent dans différentes positions autour du FrameView (j'essaye d'implémenter ce qui ressemble à un écran radar). Je suis capable de les créer et de les ajouter très bien, et ils apparaissent sur l'écran. Cependant, lorsque j'essaie de définir leurs marges, cela ne semble pas avoir d'effet. Peu importe ce que je définis, tous les ImageViews apparaissent dans le coin supérieur gauche du FrameView, au lieu d'être compensés par les marges appropriées. Ma présentation XML est répertoriée ci-dessous, avec le code qui génère les vues enfant. Est-ce que je fais quelque chose de mal? Comment puis-je obtenir les marges à afficher correctement? Ou y a-t-il une meilleure façon de le faire qu'en utilisant des marges.Définir les marges d'une nouvelle vue par programmation
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RadarBackground"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/radar_bg">
<FrameLayout
android:id="@+id/RadarFrame"
android:layout_width="320dip"
android:layout_height="320dip"
android:layout_marginTop="25dip">
</FrameLayout>
</LinearLayout>
Java:
for (int i = 0; i < getData().getTargetCount(); i ++) {
int id = getData().getTargetId(i);
Log.d(T.TAG_A, "Radar: plotting target " + id);
TargetView tv = new TargetView(this, id, getData().getTargetName(id));
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.setMargins(
radarCenterX + (int) (getData().calcTargetRadarX(id, radarSize)/radarScale) - (targetSizeX/2),
radarCenterY - (int) (getData().calcTargetRadarY(id, radarSize)/radarScale) - (targetSizeY/2),
0, 0);
tv.setImageResource(R.drawable.radar_civilian);
tv.setOnClickListener(this);
mTargets.add(tv);
mFrame.addView(tv, lp);
}
Hmm, ok. Je comptais juste sur la gravité par défaut de LEFT & TOP, mais je leur donnerai des valeurs de gravité explicites. Merci! – bjg222
Ok, ça a marché, merci pour la réponse! Je devais juste ajouter les attributs "android: layout_gravity" aux enfants du FrameLayout (ou, en code, définir le membre gravity de la classe FrameLayout.LayoutParams) – bjg222