Répondre

0

Vous pouvez créer votre propre mise en page.

Cette disposition passera automatiquement à la ligne suivante s'il n'y a pas assez d'espace. Comme float: left en html/css

public class PredicateLayout extends ViewGroup { 

    private int line_height; 

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

    public PredicateLayout(Context context, AttributeSet attrs){ 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     assert(MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED); 

     final int width = MeasureSpec.getSize(widthMeasureSpec); 

     // The next line is WRONG!!! Doesn't take into account requested MeasureSpec mode! 
     int height = MeasureSpec.getSize(heightMeasureSpec) - getPaddingTop() - getPaddingBottom(); 
     final int count = getChildCount(); 
     int line_height = 0; 

     int xpos = getPaddingLeft(); 
     int ypos = getPaddingTop(); 

     for (int i = 0; i < count; i++) { 
      final View child = getChildAt(i); 
      if (child.getVisibility() != GONE) { 
       final LayoutParams lp = (LayoutParams) child.getLayoutParams(); 
       child.measure(
         MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), 
         MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST)); 

       final int childw = child.getMeasuredWidth(); 
       line_height = Math.max(line_height, child.getMeasuredHeight() + lp.height); 

       if (xpos + childw > width) { 
        xpos = getPaddingLeft(); 
        ypos += line_height; 
       } 

       xpos += childw + lp.width; 
      } 
     } 
     this.line_height = line_height; 

     if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.UNSPECIFIED){ 
      height = ypos + line_height; 

     } else if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST){ 
      if (ypos + line_height < height){ 
       height = ypos + line_height; 
      } 
     } 
     setMeasuredDimension(width, height); 
    } 

    @Override 
    protected LayoutParams generateDefaultLayoutParams() { 
     return new LayoutParams(30, 30); // default of 1px spacing 
    } 

    @Override 
    protected boolean checkLayoutParams(LayoutParams p) { 
     return (p instanceof LayoutParams); 
    } 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     final int count = getChildCount(); 
     final int width = r - l; 
     int xpos = getPaddingLeft(); 
     int ypos = getPaddingTop(); 

     for (int i = 0; i < count; i++) { 
      final View child = getChildAt(i); 
      if (child.getVisibility() != GONE) { 
       final int childw = child.getMeasuredWidth(); 
       final int childh = child.getMeasuredHeight(); 
       final LayoutParams lp = (LayoutParams) child.getLayoutParams(); 
       if (xpos + childw > width) { 
        xpos = getPaddingLeft(); 
        ypos += line_height; 
       } 
       child.layout(xpos, ypos, xpos + childw, ypos + childh); 
       xpos += childw + lp.width; 
      } 
     } 
    } 
} 
+0

Je vais essayer. Merci... –

1

Mais lorsque la taille de l'écran est réduite, certains textView disparaissent. Comment puis-je organiser cela?

Utilisez un ScrollView pour rendre l'interface utilisateur scrollable.

+1

Ahmad est correct, vous voulez envelopper votre mise en page ScrollView. –

+0

Merci..Puis-je fixé sans 'ScrollView'? –

Questions connexes