如何将多个相同的自定义视图添加到Android的网格布局从Java代码

问题描述:

我正在学习Android中的自定义视图。 我做了一个自定义视图,带有一个矩形和一个文本。自定义视图的代码是:如何将多个相同的自定义视图添加到Android的网格布局从Java代码

public class TileGenerator extends View { 

    // rectangle parameters 
    private Rect rect = new Rect(); 
    private Paint rectPaint = new Paint(); 

    private Integer rectEndX; 
    private Integer rectEndY; 
    private Integer rectStartX; 
    private Integer rectStartY; 
    private Integer rectFillColor; 


    private Float rectTextStartX; 
    private Float rectTextStartY; 

    //rectangle text 
    private String rectText; 
    private Paint rectTextPaint = new Paint(); 

    public TileGenerator(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onAttachedToWindow() { 
     super.onAttachedToWindow(); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 

    public void setTileTitleText(String rectText) { 
     this.rectText = rectText; 
    } 

    @Override 
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
     super.onLayout(changed, left, top, right, bottom); 

     rectEndX = getrectEndX(); 
     rectEndY = getrectEndY(); 
     rectStartX = getRectStartX(); 
     rectStartY = getRectStartY(); 

     rectTextStartX = rectEndX/4f + rectStartX; 
     rectTextStartY = 3.5f * rectEndY/4f + rectStartY; 

     rectTextPaint.setTextSize(rectEndY/8); 
     rectTextPaint.setColor(Color.BLACK); 

     rect.set(rectStartX,rectStartY,rectEndX,rectEndY); 
     rectPaint.setColor(getRectFillColor()); 
    } 

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

     canvas.drawRect(rect, rectPaint); 
     canvas.drawText(rectText,rectTextStartX,rectTextStartY,rectTextPaint); 
    } 

    @Override 
    protected void onDetachedFromWindow() { 
     super.onDetachedFromWindow(); 
    } 

    public Integer getrectEndX() { 
     return rectEndX; 
    } 

    public void setrectEndX(Integer rectEndX) { 
     this.rectEndX = rectEndX; 
    } 

    public Integer getrectEndY() { 
     return rectEndY; 
    } 

    public void setrectEndY(Integer rectEndY) { 
     this.rectEndY = rectEndY; 
    } 

    public Integer getRectStartX() { 
     return rectStartX; 
    } 

    public void setRectStartX(Integer rectStartX) { 
     this.rectStartX = rectStartX; 
    } 

    public Integer getRectStartY() { 
     return rectStartY; 
    } 

    public void setRectStartY(Integer rectStartY) { 
     this.rectStartY = rectStartY; 
    } 

    public Integer getRectFillColor() { 
     return rectFillColor; 
    } 

    public void setRectFillColor(Integer rectFillColor) { 
     this.rectFillColor = rectFillColor; 
    } 

    public String getRectText() { 
     return rectText; 
    } 
} 

之后,我创建了一个空白活动。我正在用JAVA代码完成所有工作。 否XML。然后我尝试将上述自定义视图添加到GridView布局。我想在水平网格视图中添加两个具有不同文本的自定义视图。到目前为止我的代码如下:

 @Override 
    protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    GridLayout gridLayout = new GridLayout(this); 

    // first custom view   
    CustomRectWithText customRectWithText = new CustomRectWithText(this); 
    customRectWithText.setRectEndX(200); 
    customRectWithText.setRectEndY(200); 

    customRectWithText.setRectStartX(2); 
    customRectWithText.setRectStartY(2); 

    customRectWithText.setImage(image); 

    customRectWithText.setRectText("Text"); 

    customRectWithText.setRectFillColor(Color.BLUE); 

    gridLayout.addView(customRectWithText); 

    // second custom view 
    CustomRectWithText customRectWithText1 = new CustomRectWithText(this); 
    customRectWithText1.setRectEndX(400); 
    customRectWithText1.setRectEndY(200); 

    customRectWithText1.setRectStartX(200 + 5); 
    customRectWithText1.setRectStartY(2); 

    customRectWithText1.setTileTitleText("Text 1"); 

    customRectWithText1.setRectFillColor(Color.GREEN); 

    gridLayout.addView(customRectWithText1); 
    setContentView(gridLayout); 
    } 

但仍然我没有得到在网格视图中的两个矩形。一次只显示一个矩形。在上述情况下,只显示第一个自定义视图。

我在哪里做错了。 我想要的是在网格视图内制作任意大小的不同标签的重复矩形。 这是做到这一点的方法。我的意思是还有其他方法。

  • 我不想使用ListItems。

对不起,但我没有足够的回购评论。 但是,为什么不制作适配器? Gridview的行为与listView相同。 使用适配器填充您的网格。 这是填充listView和gridView的正确方法。

+0

谢谢。简单而快速。 – Computergodzilla 2015-03-14 03:59:09