Android 在视图组中以编程方式添加子视图
我正在创建一个自定义视图组,它的工作方式与GridView类似,但在添加和定位子视图时遇到了一些困难(渲染后视图为空) 这是我的自定义视图组:Android 在视图组中以编程方式添加子视图,android,viewgroup,Android,Viewgroup,我正在创建一个自定义视图组,它的工作方式与GridView类似,但在添加和定位子视图时遇到了一些困难(渲染后视图为空) 这是我的自定义视图组: public class BoardView extends ViewGroup { private static final int mCols = 5; private static final int mRows = 7; private Context mContext; private Integer[]
public class BoardView extends ViewGroup {
private static final int mCols = 5;
private static final int mRows = 7;
private Context mContext;
private Integer[] mNumbers;
private Integer mRightOption;
private Integer mSize;
public BoardView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mNumbers = randomNumbers(); // fill the array with 35 random numbers
}
// ViewGroup methods
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (mNumbers == null || mNumbers.length == 0)
return;
Log.d("BoardView", String.format("left: %s top: %s right: %s bottom: %s", left, top, right, bottom));
int counter = 0;
removeAllViews();
for (int c = 0; c < mCols; c++) {
for (int r = 0; r < mRows; r++) {
final int currentNumber = mNumbers[counter];
LayoutParams params = new LayoutParams(mSize, mSize);
final int viewLeft = left + (c * mSize);
final int viewTop = top + (r * mSize);
final int viewRight = right - ((mCols - (c + 1)) * mSize);
final int viewBottom = bottom - ((mRows - (r + 1)) * mSize);
Log.d("NumberView", String.format("left: %s top: %s right: %s bottom: %s", viewLeft, viewTop, viewRight, viewBottom));
NumberView numberView = new NumberView(mContext);
numberView.setLayoutParams(params);
numberView.setNumber(currentNumber);
numberView.layout(
viewLeft,
viewTop,
viewRight,
viewBottom);
addView(numberView);
counter++;
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// Try for a width based on our minimum
int minw = getPaddingLeft() + getPaddingRight() + getSuggestedMinimumWidth();
int w = Math.max(minw, MeasureSpec.getSize(widthMeasureSpec));
// Whatever the width ends up being, ask for a height that would let the pie
// get as big as it can
int minh = w + getPaddingBottom() + getPaddingTop();
int h = Math.min(MeasureSpec.getSize(heightMeasureSpec), minh);
mSize = w / 5;
setMeasuredDimension(w, h);
}
}
公共类BoardView扩展了ViewGroup{
专用静态最终int mCols=5;
专用静态最终int mRows=7;
私有上下文;
私有整数[]个数;
私有整数选项;
私有整数mSize;
公共BoardView(上下文、属性集属性){
超级(上下文,attrs);
mContext=上下文;
mNumbers=randomNumbers();//用35个随机数填充数组
}
//视图组方法
@凌驾
仅限受保护的空心布局(布尔值已更改、整数左侧、整数顶部、整数右侧、整数底部){
if(mNumbers==null | | mNumbers.length==0)
回来
Log.d(“BoardView”,String.format(“左:%s上:%s右:%s下:%s”,左,上,右,下”);
int计数器=0;
移除所有视图();
对于(int c=0;c
有什么问题吗?为什么要删除所有视图并在每个布局上创建新视图?@Karakuri,我删除了该行,但它仍然不起作用。这并不能回答我的问题。