2013-09-04 3 views
0

Я пытаюсь добавить пять или около того ImageViews в RelativeLayout, причем каждый новый справа от предыдущего. Тем не менее, я получаю (по-видимому) все они сложены друг на друга, как будто все они ALIGN_PARENT_LEFT. Соответствующий фрагмент кода:Устранение неполадок ImageViews программно в RelativeLayout

ImageView[] foo = new ImageView[levels]; 
for (int i = 0; i < levels; i++) { 
    foo[i] = new ImageView(context); 
    layoutFoo.addView(foo[i]); 
    foo[i].setId(10 + i); 
    if (i == 0) { 
     RelativeLayout.LayoutParams fooParams = (RelativeLayout.LayoutParams) foo[i].getLayoutParams(); 
     fooParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
     foo[i].setLayoutParams(fooParams); 
    } else { 
     RelativeLayout.LayoutParams fooParams = (RelativeLayout.LayoutParams) foo[i].getLayoutParams(); 
     fooParams.addRule(RelativeLayout.RIGHT_OF, foo[i-1].getId()); 
     foo[i].setLayoutParams(fooParams); 
    } 
} 

Любые намеки, что я делаю неправильно? Не имеет значения, что ImageViews не имеют ширины (потому что я еще не присвоил им растровое изображение), верно?

Редакция: проблема оказалась не в установке высоты и ширины для ImageView. Решение состоит в том, чтобы установить их либо с помощью setLayoutParams(), либо с помощью конструктора, как в примере JustWork.

ответ

-1

После установки свойств вы должны добавить свои ImageViews.

Переместить этот код в конец для цикла:

layoutFoo.addView(foo[i]); 

Кстати, вы не должны ImageView[]. Вы можете сделать это с помощью одного ImageView.

UPDATE:

Вот код, который вы можете сделать то же самое с:

ImageView foo; 
RelativeLayout.LayoutParams fooParams; 
for (int i = 0; i < levels; i++) { 
    foo = new ImageView(context); 
    foo.setId(10 + i); 
    fooParams = (RelativeLayout.LayoutParams) foo.getLayoutParams(); // I don't understand why you are trying to get params of which hasn't been specified before. 
    // If I were you, I would do like: 
    fooParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    if (i == 0) { 
     fooParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
    } else { 
     fooParams.addRule(RelativeLayout.RIGHT_OF, foo.getId()-1); 
    } 
    foo.setImageBitmap(yourBitmap); // Set bitmap. 
    foo.setLayoutParams(fooParams); 
    layoutFoo.addView(foo); 
} 
+0

Если я чего-то не упускаю, это неправда; попытка добавить правило в представление, которое не было добавлено в макет, вызывает исключение RuntimeException. – DevOfZot

+0

Кроме того, вы могли бы расширить этот второй бит? Предлагаете ли вы добавить несколько изображений в ImageView? Я не вижу никаких методов для этого ... – DevOfZot

+0

К сожалению, вы так скучаете. Это всего лишь один пример, который я нашел через 5 секунд и докажу, что вам не хватает: http://stackoverflow.com/a/2397869/2371858 – JustWork

-1

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