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

Views with different width but same 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 模拟器上,我有两种情况:

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


问题:

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

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

floor(772 / 120) = 6

如果每个视图占用 6 个像素,这将占用 720 个像素 (120 x 6),剩下 52 个像素。所以你的选择是在最后留下 52px 的间隙,或者在 52 个视图上添加额外的 1px。后者是目前正在发生的事情。

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