宽度不同但重量相同的视图

时间:2016-06-18 12:00:48

标签: android width android-layout-weight

在水平的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模拟器上,我遇到了两种情况:

  • 关于肖像,68第一台电视是6px宽,而另外52台是7px宽
  • 在风景中,4个第一个电视是9px宽,而另外116个是10px宽

所有这一切的最终用途是有些电视有时会更重。请注意,除了这个小错误,我得到了我想要的非常精确的图形结果: - )

问题:

  1. 为什么我的电视宽度不一样(我会接受1或2来完成总宽度)?
  2. 如何解决此错误?
  3. LinearLayout是我做我想做的最佳布局吗?

1 个答案:

答案 0 :(得分:1)

此行为完全符合预期。在纵向的Nexus 4模拟器上,你有772px。您希望在120个视图之间平均分配。

floor(772 / 120) = 6

如果每个视图占用6个像素,则需要720像素(120 x 6),剩下52个。所以你的选择是在最后留出52px的差距,或者在52个视图上增加额外的1px。后者是目前正在发生的事情。

解决此问题的唯一方法是选择一些可以精确划分屏幕上像素数的视图。例如,如果您的屏幕宽度为700px,那么100个7px的视图将非常适合。