0

J'apprends des vues personnalisées dans android. J'ai fait une vue personnalisée, avec un rectangle et un texte. Le code de la vue personnalisée est:Comment ajouter plus d'une même vue personnalisée à une disposition de grille dans Android à partir du code 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; 
    } 
} 

Ensuite, j'ai créé une activité vide. Je fais tout avec le code JAVA. Aucun code XML. Ensuite, j'essaie d'ajouter la vue personnalisée ci-dessus à une mise en page gridview. Je veux ajouter deux vues personnalisées avec du texte différent dans une grille horizontale. Jusqu'à présent, mon code est comme ci-dessous:

 @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); 
    } 

Mais je ne reçois pas les deux rectangles en vue de la grille. Un seul rectangle est affiché à la fois. Dans le cas ci-dessus, seule la première vue personnalisée est affichée.

Où est-ce que je fais mal. Tout ce que je veux, c'est faire un rectangle répétitif d'étiquettes variables de n'importe quelle taille dans une vue de la grille. Est-ce la façon de le faire. Je veux dire est-il un autre moyen.

  • Je ne souhaite pas utiliser ListItems.

Répondre

1

Désolé, mais je n'ai pas assez de repo pour commenter. Mais pourquoi ne pas faire un adaptateur? Gridview se comporte de la même manière que listView. Utilisez un adaptateur pour remplir votre grille. Ceci est le bon moyen de remplir aussi les fonctions listView et gridView.

+0

Merci. Simple et rapide. – Computergodzilla