2010-09-04 27 views
0

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

Répondre

4

FrameLayout ne considère pas les paramètres de marge si vous ne spécifiez pas la vue par gravité. Essayez de spécifier la gravité pour toutes les images.

HTH!

+0

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

+1

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

Questions connexes