Установите поля нового представления программно - PullRequest
0 голосов
/ 04 сентября 2010

У меня есть FrameView, созданный в моем макете XML, и в своем коде я пытаюсь создать серию новых ImageViews и добавить их в качестве дочерних элементов этого FrameView.ImageViews имеют небольшой размер, всего около 15 пикселей, и я хочу, чтобы они отображались в разных местах вокруг FrameView (я пытаюсь реализовать то, что выглядит как экран радара).Я могу создать их и добавить их просто отлично, и они появляются на экране.Однако, когда я пытаюсь установить их поля, это, похоже, не дает никакого эффекта.Независимо от того, что я установил, все ImageViews отображаются в верхнем левом углу FrameView, в отличие от смещения соответствующими полями.Мой XML-макет указан ниже вместе с кодом, который генерирует дочерние представления.Я делаю что-то неправильно?Как я могу заставить поля отображаться правильно?Или есть лучший способ сделать это, чем с помощью полей.

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

1 Ответ

5 голосов
/ 04 сентября 2010

FrameLayout не учитывает параметры полей, если вы не укажете Gravity вида. Попробуйте указать гравитацию для всех изображений.

HTH!

...