将多个ImageView添加到布局

时间:2010-08-31 15:25:47

标签: android

我需要将多个ImageView加载到布局中。 ImageView用于显示使用“星形”图标的评级。星数(即通过读取配置文件在加载期间确定评级。

ImageViews位于RelativeLayout布局中。

目前我使用的是这样的东西:

RelativeLayout l = ((RelativeLayout)(findViewById(R.id.RelativeLayout01)));
for (int nStarCount = 0; nStarCount < config.getAsInt("stars", 1); nStarCount ++) {
    ImageView image = new ImageView(this);
    image .setImageResource(R.drawable.star);
    image .setAdjustViewBounds(true); 
    l.addView(i); 
}

我的问题是:

1)动态加载(不使用xml)是“正确”的做法吗?

2)如果是,如何让星星显示在一条线上,目前它们是一个在另一个上面。

任何帮助都将不胜感激。

RM

3 个答案:

答案 0 :(得分:3)

如果您知道要分配的最大星数,则可以使用内置的RatingBar视图。您的XML就变成了:

<RatingBar android:id="@+id/ratingbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="5"
    android:stepSize="1.0"/>

在您的代码中,请致电ratingBar.setRating()以设置评分。如果您不想看到“空”星,可以将最大等级和实际等级设置为相同的数字。这样,您可以省去重新实现相同小部件的麻烦。

请参阅:http://developer.android.com/resources/tutorials/views/hello-formstuff.html#RatingBar

答案 1 :(得分:2)

对于您正在创建的动态视图,我认为通过代码执行此操作并不会有任何问题。

但是,如果您希望通过xml进行布局,则可以执行此操作,然后根据代码调整可见性。即:

<RelativeLayout ...>
   ... stuff goes here
  <LinearLayout ..(setup where you want this
    orienation="horizontal">
     <ImageView id="@+id/star1"
       android:src="@drawable/star"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
     <ImageView id="@+id/star2"
       android:src="@drawable/star"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
     <ImageView id="@+id/star3"
       android:src="@drawable/star"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
     <ImageView id="@+id/star4"
       android:src="@drawable/star"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
     <ImageView id="@+id/star5"
       android:src="@drawable/star"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
  </LinearLayout>
</RelativeLayout>

代码实际上看起来有点尴尬,因为你需要通过id来解决每个星形imageView。

如果你做了很多这些,你可以通过将id保存到列表中来使代码变得不那么难看:

List<Integer> starIds = new List<Integer>();
starIds.add(R.id.star1);
starIds.add(R.id.star2);
...

for (int x=starCount; x<5; x++) {
  ImageView view = (ImageView)findById(starIds[x]);
  view.setVisiblity(GONE);
}

答案 2 :(得分:0)

1)无论如何都没关系。大多数人都喜欢XML。

2)将它们放在LinearLayout中,Orientation设置为HORIZONTAL