不同宽度但相同重量的视图
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 模拟器上,我有两种情况:
- 在纵向上,68 个第一台电视的宽度为 6px,而其他 52 个电视的宽度为 7px
- 在横向上,4 个第一台电视的宽度为 9px,而其他 116 个电视的宽度为 10px
所有这一切的最终用途是某些电视有时会更重。请注意,除了这个小错误,我得到了我想要的非常精确的图形结果:-)
问题:
- 为什么我的电视宽度不一样(我接受 1 或 2 来完成总宽度)?
- 我该如何解决这个错误?
- LinearLayout 是我做我想做的最佳布局吗?
此行为完全符合预期。在纵向的 Nexus 4 模拟器上,你有 772px。您想在 120 个视图之间平均分配。
floor(772 / 120) = 6
如果每个视图占用 6 个像素,这将占用 720 个像素 (120 x 6),剩下 52 个像素。所以你的选择是在最后留下 52px 的间隙,或者在 52 个视图上添加额外的 1px。后者是目前正在发生的事情。
解决这个问题的唯一方法是选择多个视图,这些视图可以精确地划分屏幕上的像素数。例如,如果您的屏幕宽度为 700 像素,则 100 个 7 像素的视图将非常适合。
在水平 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 或 2 来完成总宽度)?
- 我该如何解决这个错误?
- LinearLayout 是我做我想做的最佳布局吗?
此行为完全符合预期。在纵向的 Nexus 4 模拟器上,你有 772px。您想在 120 个视图之间平均分配。
floor(772 / 120) = 6
如果每个视图占用 6 个像素,这将占用 720 个像素 (120 x 6),剩下 52 个像素。所以你的选择是在最后留下 52px 的间隙,或者在 52 个视图上添加额外的 1px。后者是目前正在发生的事情。
解决这个问题的唯一方法是选择多个视图,这些视图可以精确地划分屏幕上的像素数。例如,如果您的屏幕宽度为 700 像素,则 100 个 7 像素的视图将非常适合。