我需要将多个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
答案 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