我正在尝试制作一个动态网格布局,它是 API 10+ 是让它进展缓慢的部分。我试图让它自动换行..但最后发现尝试使用坐标将其强制为网格模式更容易。当我在创建时进行定位时,这个脚本本身就可以工作,但现在我试图循环遍历每个项目。因此,如果一个项目被删除,它们都会浮回到一个中间没有孔的网格中。
问题是,布局参数似乎只适用于最后一个对象。
这是一些基本变量和 onCreate 设置:
int screenWidth;
int screenHeight;
int distStep = 130;
int leftPad = 20;
int numCols;
int baseID = 0;
android.util.DisplayMetrics metrics = this.getResources().getDisplayMetrics();
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
numCols = (int) (screenWidth - leftPad) / distStep;
int scrRemain = screenWidth - ((numCols * distStep) + leftPad);
distStep += (int) scrRemain / numCols;
然后进入添加的主要功能:
public void addObjToLayout() {
RelativeLayout relLay = (RelativeLayout) this.findViewById(R.id.mainWindow);
for(int i = 1; i <= currQuantity; i++){
TextView tv=new TextView(this);
tv.setTextSize(40);
tv.setId(baseID + i);
tv.setPadding(24, 4, 24, 4);
tv.setBackgroundColor(0x110000FF);
tv.setText(String.valueOf(baseID + i)); //Val for debugging
tv.setTextColor(0xFFFFFFFF);
relLay.addView(tv);
}
baseID += currQuantity;
sortLayout();
}
然后排序:
public void sortLayout() {
int leftNum = 20;
int topNum = 0;
for(int i = 1; i <= baseID; i++){
TextView tv= (TextView) this.findViewById(baseID);
MarginLayoutParams mp = new MarginLayoutParams(tv.getLayoutParams());
mp.setMargins(leftNum, topNum, 0, 0);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(mp);
tv.setLayoutParams(lp);
leftNum += distStep;
if(leftNum >= distStep * numCols){
leftNum = leftPad;
topNum += distStep;
}
}
}
我得到的是所有文本视图都堆积在左上角,除了最后一个准确定位在它应该在的位置。所以在我看来,params 对象直到循环结束或其他东西才会应用......但从逻辑上讲,我不明白为什么。
正如我所说,这在我一开始就设置参数时起作用,问题是一次大规模更新它们。我对android很陌生,所以我希望我不只是在做一些愚蠢的事情。
谢谢你的时间