我有一个根据用户设置显示按钮的对话框。 我希望按钮以最佳的6行顺序排列。 意思是,如果用户输入1-6个条目,则应该有1行6个按钮。 如果他输入了7个条目,则第1行和第2行不应为6,而第2行应为4,第2行为3。 如果他输入8,则每行应该有4个按钮 等等......
由于我是一个有点经验丰富的开发人员,我觉得这有点愚蠢....但我很难找到以编程方式找出这些数字的正确方法。
如果有人可以帮助我,我会很感激
谢谢, 大卫
答案 0 :(得分:0)
我可以在这里想到几个解决方案。基本思路是找出你需要多少行,然后平均每行的按钮数。然后诀窍是处理不均匀的行。
rows = buttons/row_limit;
buttons_per_row = buttons/rows;
然后,您可以向行添加按钮并跟踪剩余部分,或者使用某种处理剩余按钮的递归函数。
button_remainder = 0;
for(row in rows)
row_buttons = math.floor(buttons_per_row);
buttons -= row_buttons;
button_remainder += buttons_per_row - row_buttons;
if(button_remainder >= 1)
row_buttons++;
buttons--;
row.setButtonCount(row_buttons);
递归函数类似,但它不会跟踪按钮的小数余数。
答案 1 :(得分:0)
如果a / b
是整数除法且a % b
是a
除以b
的余数,那么您将需要
rows = (buttons + 5) / 6
按钮行。现在您可以除以行数来找到最佳分区。如果要最小化行长度的绝对差异,则第i行(从零开始)可以包含
buttons_in_line[i] = buttons / rows + (i < buttons % rows ? 1 : 0)
按钮。例如。对于22个按钮,您将获得以下布局:
# # # # # #
# # # # # #
# # # # #
# # # # #
或19个按钮:
# # # # #
# # # # #
# # # # #
# # # #