我通过使用api的left和top值动态创建布局。 api数据如下所示: -
@Entity
public class Person {
private String name;
private String login;
private String mail;
private List<PersonTeam> teams;
}
public class PersonTeam {
private String teamId;
private String teamName;
}
我编写的用于创建布局的代码是:
{
"isSuccess": true,
"data": [{
"left": "159",
"top": "17",
"seat_name": "Staff"
},
{
"left": "159",
"top": "65",
"seat_name": "Staff"
},
{
"left": "238",
"top": "15",
"seat_name": "3"
},
{
"left": "239",
"top": "66",
"seat_name": "4"
},
{
"left": "313",
"top": "13",
"seat_name": "5"
},
{
"left": "314",
"top": "67",
"seat_name": "6"
},
{
"left": "241",
"top": "223",
"seat_name": "7"
},
{
"left": "239",
"top": "160",
"seat_name": "8"
},
{
"left": "314",
"top": "159",
"seat_name": "9"
},
{
"left": "315",
"top": "223",
"seat_name": "10"
},
{
"left": "366",
"top": "223",
"seat_name": "11"
},
{
"left": "364",
"top": "160",
"seat_name": "12"
},
{
"left": "374",
"top": "71",
"seat_name": "13"
},
{
"left": "371",
"top": "12",
"seat_name": "14"
},
{
"left": "430",
"top": "12",
"seat_name": "15"
},
{
"left": "432",
"top": "68",
"seat_name": "16"
},
{
"left": "428",
"top": "158",
"seat_name": "17"
},
{
"left": "431",
"top": "223",
"seat_name": "18"
},
{
"left": "493",
"top": "12",
"seat_name": "19"
},
{
"left": "492",
"top": "64",
"seat_name": "20"
},
{
"left": "491",
"top": "158",
"seat_name": "21"
},
{
"left": "486",
"top": "222",
"seat_name": "22"
},
{
"left": "555",
"top": "14",
"seat_name": "23"
},
{
"left": "553",
"top": "65",
"seat_name": "24"
},
{
"left": "553",
"top": "160",
"seat_name": "25"
},
{
"left": "553",
"top": "220",
"seat_name": "26"
},
{
"left": "616",
"top": "16",
"seat_name": "27"
},
{
"left": "618",
"top": "65",
"seat_name": "28"
},
{
"left": "620",
"top": "117",
"seat_name": "29"
},
{
"left": "618",
"top": "166",
"seat_name": "30"
},
{
"left": "619",
"top": "216",
"seat_name": "31"
}
]}
所以使用上面的代码,我得到的输出如下(几乎完美)。只是在每个项目之间存在间距问题:
注意:我已经通过在视图上应用绝对位置参数在React Native中实现了这个api。它已在许多Android设备上完美展示了UI,我已对其进行了测试。
所以我的问题是:
我在上面的代码中做错了吗?
答案 0 :(得分:2)
首先,您需要获得放置座位的视图大小。 简单方法 - 获得显示宽度和高度:
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
但这很难维护(你没有机会把它移到其他容器)
更好的方法 - 创建自定义ViewGroup
(例如FrameLayout
)并覆盖onMeasure / onLayout方法,请参阅How to size an Android view based on its parent's dimensions
获得尺码后,您必须重新计算位置。 首先获得最大左上角和最大上限。 比计算比例系数。例如,如果screan宽度为600,则最大左点为250,座位宽度为100,而比例宽度系数为(600-100)/ 250 = 2 然后使用系数添加所有座位:
objItemParams.setMargins(objSeat.getIntTop() * scaleCoefWidth, objSeat.getIntLeft() * scaleCoefHeigth, 0, 0);
注意,如果你想将它添加到垂直滚动而不是需要更改获取高度的逻辑(例如,如果座位数小于10,则在screan上绘制所有内容,如果超过10,则必须是高度超过屏幕(或ViewGroup
)高度以允许垂直滚动。