在水平的LinearLayout中,我想要均匀地散布很多文本视图(我说我的最大值现在是120)。
目前,我是通过将权重设置为120,然后添加120个文本视图并使用1f
的轮次来实现的。
以下是我测试的简化代码:
LinearLayout layout = new LinearLayout(context);
layout.setWeightSum(120);
for (int i = 0; i < 120; i++) {
TextView tv = new TextView(context);
tv.setLayoutParams(new LinearLayout.LayoutParams(0, 100, 1f));
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Dan", "onClick: getWidth="+v.getWidth());
}
});
layout.addView(tv);
}
在我的Genymotion Nexus 4模拟器上,我遇到了两种情况:
所有这一切的最终用途是有些电视有时会更重。请注意,除了这个小错误,我得到了我想要的非常精确的图形结果: - )
答案 0 :(得分:1)
此行为完全符合预期。在纵向的Nexus 4模拟器上,你有772px。您希望在120个视图之间平均分配。
floor(772 / 120) = 6
如果每个视图占用6个像素,则需要720像素(120 x 6),剩下52个。所以你的选择是在最后留出52px的差距,或者在52个视图上增加额外的1px。后者是目前正在发生的事情。
解决此问题的唯一方法是选择一些可以精确划分屏幕上像素数的视图。例如,如果您的屏幕宽度为700px,那么100个7px的视图将非常适合。