我正在尝试制作一个动态的网格布局,它是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;
}
}
}
我得到的是所有textViews都堆积在左上角,除了最后一个文本定位到它应该的位置。所以在我看来,params对象直到循环结束或者其他东西才适用..但逻辑上我不明白为什么。
正如我所说的那样,当我在开始时设置参数时,这是有效的,问题是立即大量更新它们。我对android很新,所以我希望我不只是做一些愚蠢的事情。
感谢您的时间
答案 0 :(得分:0)
保证金意味着它将在前一个视图和当前视图之间设置一个间隙。 将view1,view2和view3添加到网格布局时,如果在某个时间点删除view2,则根据view1设置view3的边距。因此,它不会留空空间代替view2。不要在运行时删除view2,而是将view2的背景设置为null,并将文本设置为空,如下所示。
textView.setBackground(null);
textView.setText("");
这样视图仍然可用但看起来已删除。
答案 1 :(得分:0)
开始使用扩展的baseAdapter查看GridView。看起来很有希望:
更多信息(参见#2): http://www.mkyong.com/android/android-gridview-example/