У меня есть 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);
}
Хм, хорошо. Я просто полагался на силу по умолчанию LEFT & TOP, но я дам им явные значения гравитации. Благодаря! – bjg222
Хорошо, это сработало, спасибо за ответ! Мне просто нужно было добавить атрибуты android: layout_gravity для дочерних элементов FrameLayout (или, в коде, установить элемент тяжести класса FrameLayout.LayoutParams) – bjg222