Bonjour,

J'ai tenté d'implémenter FlowLayout à mon application Android grâce à ce que j'ai trouvé ici : http://nishantvnair.wordpress.com/20...ut-in-android/

Malheureusement, je reçois l'erreur "android.view.ViewGroup$LayoutParams cannot be cast to longest.game.FlowLayout$LayoutParams"...

Mais je ne comprends pas trop ce que cela veut dire et je ne vois pas comment m'en débarrasser :/

Voilà mon fichier main.xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?xml version="1.0" encoding="utf-8"?>
	<ScrollView
	xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
 
	    <LinearLayout
	    android:orientation="vertical"
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent" >
 
			<LinearLayout
			android:id="@+id/main"
		    android:orientation="vertical"
		    android:layout_width="fill_parent"
		    android:layout_height="fill_parent"
		    android:padding="19dp"
		    >
 
			    <LinearLayout
				android:id="@+id/topMenu"
			    android:orientation="horizontal"
			    android:layout_width="fill_parent"
			    android:layout_height="fill_parent" >
 
			        <ImageView
			            android:layout_width="wrap_content"
			            android:layout_height="wrap_content"
			            android:src="@drawable/ic_launcher" />
 
			    	<TextView
				    android:id="@+id/affNiveau"
			        style="@style/Texte"
			        android:textColor="#fff"
			         />
			   	</LinearLayout>
 
			    <ImageView
			            android:layout_width="wrap_content"
			            android:layout_height="wrap_content"
			            android:src="@drawable/bubble_top"
			            android:layout_marginTop="-17dp"
			            android:layout_marginLeft="55dp" />
 
			    <LinearLayout
				android:id="@+id/content"
			    android:orientation="vertical"
			    android:layout_width="fill_parent"
			    android:layout_height="fill_parent"
			    android:background="@drawable/bubble">
 
				    <TextView
				    android:id="@+id/contenu"	     
			        style="@style/Texte"
			         />
 
			        <longest.game.FlowLayout
					android:id="@+id/horizontal"
				    android:orientation="vertical"
				    android:layout_width="fill_parent"
				    android:layout_height="fill_parent"
				    android:gravity="center" >
 
			            <Button
			                android:id="@+id/button1"
			                android:layout_width="wrap_content"
			                android:layout_height="wrap_content"
			                android:text="Button de test de test de ergfetg ret f" />
 
			            <Button
			                android:id="@+id/button2"
			                android:layout_width="wrap_content"
			                android:layout_height="wrap_content"
			                android:text="Button" />
 
			        </longest.game.FlowLayout>
 
					<LinearLayout
					android:id="@+id/end"
				    android:orientation="vertical"
				    android:layout_width="fill_parent"
				    android:layout_height="fill_parent">
					</LinearLayout>
 
				</LinearLayout>
 
			</LinearLayout>
 
			<!-- Admob -->
 
		</LinearLayout>
 
	</ScrollView>
et le fichier FlowLayout.java, la classe que j'ai copiée de l'autre site :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 
package longest.game;
 
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
 
/**
 *
 * @author RAW
 */
public class FlowLayout extends ViewGroup {
 
    private int line_height;
 
    public static class LayoutParams extends ViewGroup.LayoutParams {
 
        public final int horizontal_spacing;
        public final int vertical_spacing;
 
        /**
         * @param horizontal_spacing Pixels between items, horizontally
         * @param vertical_spacing Pixels between items, vertically
         */
        public LayoutParams(int horizontal_spacing, int vertical_spacing) {
            super(0, 0);
            this.horizontal_spacing = horizontal_spacing;
            this.vertical_spacing = vertical_spacing;
        }
    }
 
    public FlowLayout(Context context) {
        super(context);
    }
 
    public FlowLayout(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) - getPaddingLeft() - getPaddingRight();
        int height = MeasureSpec.getSize(heightMeasureSpec) - getPaddingTop() - getPaddingBottom();
        final int count = getChildCount();
        int line_height = 0;
 
        int xpos = getPaddingLeft();
        int ypos = getPaddingTop();
 
        int childHeightMeasureSpec;
        if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
            childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST);
        } else {
            childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
        }
 
 
        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), childHeightMeasureSpec);
                final int childw = child.getMeasuredWidth();
                line_height = Math.max(line_height, child.getMeasuredHeight() + lp.vertical_spacing);
 
                if (xpos + childw > width) {
                    xpos = getPaddingLeft();
                    ypos += line_height;
                }
 
                xpos += childw + lp.horizontal_spacing;
            }
        }
        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 ViewGroup.LayoutParams generateDefaultLayoutParams() {
        return new LayoutParams(1, 1); // default of 1px spacing
    }
 
    @Override
    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
        if (p instanceof LayoutParams) {
            return true;
        }
        return false;
    }
 
    @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.horizontal_spacing;
            }
        }
    }
}
Une idée ?

Merci d'avance,

7804j