在写自定义控件时,需要给new出来的控件进行ID的设定,从而来对控件进行布局。
刚开始一直以为setId()传个int就行了,但是一直报错:
解决方法:
API 17以上时,可以直接使用 generateViewId() 获得,且可以得到不重复的ID。
img_left.setId(generateViewId());
当API小于17时: 可以直接使用此方法
private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);
public static int generateViewId() {
for (;;) {
final int result = sNextGeneratedId.get();
// aapt-generated IDs have the high byte nonzero; clamp to the range under that.
int newValue = result + 1;
if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0.
if (sNextGeneratedId.compareAndSet(result, newValue)) {
return result;
}
}
}