Как создать ImageView в коде Java в существующем макете?

Я ищу простой способ для пользователя увидеть, сколько напитков они выпили для калькулятора BAC.

Изображение приложения:

ИЗОБРАЖЕНИЕ ПРИЛОЖЕНИЯ

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

Поэтому, если я нажму кнопку добавления пива, под счетчиком появится кружка пива. Если я снова нажму кнопку «Добавить пиво», я хочу, чтобы под счетчиком было ДВЕ емкости с пивом, желательно, чтобы они добавлялись справа.

(Кроме того, было бы УДИВИТЕЛЬНО, если бы они достигли предела ширины, завернулись и снова начали слева, но ниже полной строки)

Я не могу понять, как это сделать. Я предполагаю, что добавление ImageView в код к относительному макету (потому что его нужно расположить справа) было бы лучшим путем, но если это возможно в xml, я был бы более чем счастлив использовать это. Любая помощь?


person Dan T    schedule 08.06.2010    source источник


Ответы (1)


В обратном вызове нажатия кнопки создайте объект ImageView, задайте изображение бутылки и расположите его. Например (я предполагаю имена ваших элементов):

ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.beerbottle);

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.RelativeLayout01);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT,
    RelativeLayout.LayoutParams.WRAP_CONTENT
);
layoutParams.addRule(RelativeLayout.BELOW, R.id.ButtonRecalculate);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

relativeLayout.addView(imageView, layoutParams);

Я не проверял это, заметьте, но это должно дать вам хорошее начало. Вам, вероятно, потребуется добавить другие параметры в ImageView и, возможно, в LayoutParams, чтобы он выглядел хорошо, а также отслеживать количество отображаемых бутылок и т. д.

person Daniel Waechter    schedule 08.06.2010
comment
Ах! Около! Только верхняя строка ImageView iv = new ImageView(this); выдает исключение Конструктор ImageView() не определен. - person Dan T; 08.06.2010
comment
Я могу заменить это на null, и он запустится, но тогда изображение не появится... - person Dan T; 08.06.2010
comment
Ах да, это в обратном вызове, поэтому ему не хватает соответствующего контекста. Замените это на ParentActivity.this, где ParentActivity — это класс Activity, в котором вы устанавливаете прослушиватель. - person Daniel Waechter; 08.06.2010
comment
Великолепно! Теперь, когда я пытаюсь сделать более одного (повторно нажимая кнопку), он накапливается поверх самого себя. Могу ли я ввести правило о том, что это RIGHT_OF? - person Dan T; 09.06.2010
comment
Вы, вероятно, захотите установить уникальный идентификатор для каждого создаваемого вами ImageView, сохранить их, а затем установить новые, чтобы они были RIGHT_OF последними добавленными. - person Daniel Waechter; 09.06.2010
comment
Я понял, как добавить несколько: только что встроил LinearLayout в Relative... теперь, чтобы выяснить, как заставить его перейти на новую строку, когда она достигнет конца. - person Dan T; 09.06.2010
comment
Понятно! создал переменную переполнения, и когда она достигла максимального числа, которое может удерживать экран, я сказал ей напечатать ДРУГОЙ линейный макет ниже этого! Большое спасибо Даниил! - person Dan T; 09.06.2010
comment
Ах, черт, LinearLayout - я должен был подумать об этом ;-P Так рад, что вы заставили его работать! Не за что. - person Daniel Waechter; 09.06.2010