Maison >Java >javaDidacticiel >Comment créer un groupe de vues personnalisé pour les mises en page avec saut de ligne ?
ViewGroup personnalisé pour la mise en page avec saut de ligne
Problème :
Vous devez créer un disposition qui présente plusieurs widgets de manière encapsulable, en les divisant en lignes si nécessaire pour s'adapter à l'espace disponible. Les composants ViewGroup par défaut ne disposent pas de cette fonctionnalité.
Solution :
Pour réaliser un saut de ligne, vous pouvez créer un ViewGroup personnalisé. Voici comment :
Mesurer les enfants :
Dans onMeasure(), calculez la largeur disponible et parcourez les vues enfants. Pour chaque enfant, mesurez sa largeur et sa hauteur. Mettez à jour line_height pour représenter la hauteur maximale de tout enfant dans une ligne donnée.
Déterminez les sauts de ligne :
Pendant la mesure, vérifiez si le la largeur accumulée des vues enfants dépasse la largeur disponible. Si tel est le cas, réinitialisez la largeur et incrémentez le ypos à la ligne suivante.
Définissez les paramètres de mise en page :
Remplacez generateDefaultLayoutParams() et checkLayoutParams () pour définir vos paramètres de mise en page personnalisés. Ces paramètres peuvent spécifier l'espacement entre les widgets, par exemple.
Layout Child Views :
Dans onLayout(), parcourez à nouveau les vues enfants et positionnez-les en fonction des dimensions mesurées et des variables xpos et ypos. Mettez à jour xpos lorsque vous ajoutez des widgets à la ligne.
Fournir la prise en charge des attributs XML :
Créez un attribut XML personnalisé pour exposer les paramètres de mise en page. Cela vous permet de les spécifier dans vos fichiers XML de mise en page.
Exemple de mise en œuvre :
public class PredicateLayout extends ViewGroup { private int line_height; public PredicateLayout(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // Calculate available width // Iterate through child views and measure them if (xpos + childw > width) { xpos = getPaddingLeft(); ypos += line_height; } ... } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { for (int i = 0; i < count; i++) { if (xpos + childw > width) { xpos = getPaddingLeft(); ypos += line_height; } // Position the child view } } }
En utilisant cette mise en page personnalisée, vous pouvez obtenez le comportement encapsulable souhaité pour vos widgets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!