Java 自定义视图未动态显示在TableRow中

Java 自定义视图未动态显示在TableRow中,java,android,android-relativelayout,android-framelayout,Java,Android,Android Relativelayout,Android Framelayout,尝试动态创建表格布局后,在表格行中膨胀我的一个布局时出现问题。文字视图按预期显示,具有正确的布局权重,但自定义视图(包含不同大小正方形的图形)没有。相反,我看到的是一个空白项,但布局权重正确BWSquares是我要充气的自定义视图 BWSquares.java public class BWSquares extends View { private final TextPaint mTextPaint; public static final int BOXES_COUNT

尝试动态创建
表格布局
后,在
表格行
中膨胀我的一个布局时出现问题。文字视图按预期显示,具有正确的布局权重,但自定义视图(包含不同大小正方形的图形)没有。相反,我看到的是一个空白项,但布局权重正确
BWSquares
是我要充气的自定义视图

BWSquares.java

public class BWSquares extends View {
    private final TextPaint mTextPaint;

    public static final int BOXES_COUNT = 7;

    private float oneDp;
    private float windowHeight;

    public BWSquares(Context context) { this(context, null); }

    public BWSquares(Context context, AttributeSet attrs) {
        super(context, attrs);
        oneDp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1,
                getResources().getDisplayMetrics());
        windowHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10,
                getResources().getDisplayMetrics());
        float textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 15,
                getResources().getDisplayMetrics());

        Paint mBlackPaint = new Paint();
        mBlackPaint.setAntiAlias(true);
        mBlackPaint.setColor(Color.BLACK);
        mBlackPaint.setStrokeWidth(oneDp);
        mBlackPaint.setStyle(Paint.Style.STROKE);

        mTextPaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
        mTextPaint.setColor(Color.BLACK);
        mTextPaint.setTextAlign(Paint.Align.CENTER);
        mTextPaint.setTextSize(textSize);
    }

    private Paint mWindowPaint;
    private Paint mWindowFilledPaint;

    RectF rect = new RectF();
    RectF rect2 = new RectF();

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (getWidth() == 0) return;

        float mSideRectWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics());

        setBackgroundColor(Color.parseColor("#808080"));

        for (int i = 0; i < BOXES_COUNT; i++) {
            float leftPosition = mSideRectWidth
                    + i * oneDp
                    + (getWidth() - mSideRectWidth * 2 - (BOXES_COUNT - 1) * oneDp) * i / BOXES_COUNT;
            float rightPosition = mSideRectWidth
                    + i * oneDp
                    + (getWidth() - mSideRectWidth * 2 - (BOXES_COUNT - 1) * oneDp) * (i + 1)
                    / BOXES_COUNT;
        }

        for (int i = 1; i < BOXES_COUNT; i++) {
            float position = mSideRectWidth + (getWidth() - mSideRectWidth * 2) * i / BOXES_COUNT;
            canvas.drawLine(position, 0, position, getHeight(), mGangwayConnectionPaint);
        }
    }

    private void fillRect(Canvas canvas, float left, float right, String number) {
        rect.set(left + oneDp / 2, 0 + oneDp / 2, right - oneDp / 2, getHeight() - oneDp / 2);
        float xPos = left + ((right - left) / 2);
        float yPos = (canvas.getHeight() / 2) - ((mTextPaint.descent() + mTextPaint.ascent()) / 2);
        canvas.drawText(number, xPos, yPos, mTextPaint);
    }    
}
公共类视图{
私人最终文本绘制mTextPaint;
公共静态最终整数框_计数=7;
私人浮动oneDp;
私人浮动窗高度;
公共BWSquares(上下文){this(上下文,null);}
公共BWSquares(上下文、属性集属性){
超级(上下文,attrs);
oneDp=类型值。应用尺寸(类型值。复杂单位,1,
getResources().getDisplayMetrics());
窗高=类型值。应用尺寸(类型值。复杂单位,10,
getResources().getDisplayMetrics());
float textSize=TypedValue.applyDimension(TypedValue.COMPLEX\u UNIT\u SP,15,
getResources().getDisplayMetrics());
Paint mBlackPaint=新油漆();
mBlackPaint.setAntiAlias(真);
mBlackPaint.setColor(颜色:黑色);
mBlackPaint.设定行程宽度(oneDp);
mBlackPaint.setStyle(油漆.样式.笔划);
mTextPaint=新的TextPaint(TextPaint.ANTI_别名_标志);
mTextPaint.setColor(颜色为黑色);
mTextPaint.setTextAlign(Paint.Align.CENTER);
mTextPaint.setTextSize(textSize);
}
私人油漆;
私家漆(mWindowFilledPaint);
RectF rect=新的RectF();
RectF rect2=新的RectF();
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
如果(getWidth()==0)返回;
float mSideRectWidth=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,5,getResources().getDisplayMetrics());
setBackgroundColor(Color.parseColor(#808080”);
对于(int i=0;i
尝试将
setWillNotDraw(false)
添加到构造函数中:

public BWSquares(Context context, AttributeSet attrs) {
    super(context, attrs);
    setWillNotDraw(false);
    ...
}

我发现了问题,框架布局不需要在那里。
public BWSquares(Context context, AttributeSet attrs) {
    super(context, attrs);
    setWillNotDraw(false);
    ...
}