除了那个错误之外,还有很多事情需要注意。
第一件事是彻底检查你的用户界面结构。目前,如果您确实可以使用布局类型正确创建视图,则不建议手动设置左/下/上/右属性。
从XML代码的外观来看,您似乎正在创建
16列x 25行
每个视图都有一个
左填充1.5%&顶部填充2.3%(这里您将其作为底部)
当前设计它的主要问题是手动使用左/下属性
和
当然
究竟为什么有人会手动创建384个视图:)
现在,创建此类UI的推荐方法如下:
样板xml
<Alloy>
<View class="resBit" left="1.5%" top="2.3%" />
</Alloy>
您的视图。xml
<View id='parentContainer' formFactor="tablet" layout='horizontal' horizontalWrap='true' right='1.5%'>
..... here comes your those resBit views created dynamically
// formFactor property is only set to parent container which also applies to its child container, so no need to set it on all 384 child views as you did
// horizontalWrap property ensures that child-views which are going out of bound, will be created in
// next row & thus it creates a grid-view automatically while using proper sizes so the last or
// 16th view fits to the end of parent view.
</View>
您的视图。js公司
// create child-views dynamically like this
for (var i=1; i<=384; i++) {
// you can pass any required arguments here needed to create child-views
var templateView = Alloy.createController('template', {
position : i
}).getView();
$.parentContainer.add(templateView);
}
var pos = $.args.position;
// if it's the last or 16th child-view in each row, then set its width to fill the parent width, which will make sure that your next child-view will move to a new row.
// it's necessary because sometimes while using %age dimensions, there might be a few pixels calculation error which can create the 16th child-view to next row
if ((pos % 16) == 0) {
$.template.width = Ti.UI.FILL;
}
最后
,因为您没有res12\u 14等ID。您仍然可以像这样访问所有子视图:
您的视图。js公司
// theValues rotates between a set of 100 or so such combinations
theValues = "2,2,3,4,5,5,4,3,2,2,3,4,5,5,4,3".split(",");
// gives you all child-views in an array
var child_views = $.parentContainer.children;
// Start on the left and move right
for (i=1; i<17; i++) {
// Start at the bottom and move up
for (ii=1; ii<25; ii++) {
if (ii < (theValues[i-1]) - 1) {
var currentChildPos = i * ii - 1; // since we started loop from 1 & array index starts from 0
// Make first row solid
if (i == 1) {
child_views[currentChildPos].setOpacity(1);
}
// Paint reds
child_views[currentChildPos].setBackgroundColor("red");
}
}
}
合金MVC框架
,编写更少的代码,编写更多可维护的代码。如果您需要在这些resBit视图中进行任何更改,那么现在可以在中进行更改
样板xml
文件,而不是在您以前的代码中的384个位置。