0

カスタム ビューを Java クラスとして定義しましたが、プログラムでそれらをレイアウトに配置したいと考えています。

次のようなレイアウト構造を定義できます。

<LinearLayout> <!-- vertical, main container -->

    <LinearLayout> <!-- 1st horizontal (consists of 2 columns (items) ) -->
        <CustomView /> <!-- 1 -->
        <CustomView /> <!-- 2 -->       
    </LinearLayout>

    <LinearLayout> <!-- 2nd horizontal (consists of 2 columns (items) ) -->
        <CustomView /> <!-- 1 -->
        <CustomView /> <!-- 2 -->
    </LinearLayout>

    <!-- ..... -->
    <LinearLayout> <!-- nth horizontal (consists of n columns (items) ) -->
        <CustomView /> <!-- 1 -->
        <CustomView /> <!-- 2 -->
    </LinearLayout>




</LinearLayout><!-- vertical container -->

しかし、カスタム ビューの 1 つを削除すると、醜いままです。n=3 で、カスタム ビュー番号 4 を削除したとします。

1 2
3 
5 6

これは見栄えがよくありません。次のように「先頭のスペースを埋める」必要があります。

1 2
3 5
6

どうすればそのようなことを達成できますか?

CustomViewまた、 s を Java コード (XML ではなく) で作成していることに注意してください。

画面サイズを取得してnで割って、値をLayoutParams.widthカスタムビューのとして割り当てようとしました。

しかし、StackOverflow のいくつかの質問によると、dp で画面サイズを取得することはあまり正確ではありません。

では、プログラムでグリッド レイアウトを作成するにはどうすればよいでしょうか。

4

1 に答える 1

0

この場合、GridView を使用しないのはなぜですか?

コレクションにあるアイテムに応じて、GridView のサイズを小さくすることができます。

int NUM_COLUMNS = 5;
double NUM_ROWS = items.size() / NUM_COLUMNS; // calculate no. of rows.
double calculateHeight;
if(items.size() % 5 == 0){ // 5, 10, 15, 20...
    calculateHeight = ((NUM_ROWS) * height of required gridview row) + 50; 
                                                        // adding 50 for spacing.
}
else{ // 1,2,3,4,6,7,8,9,11...
    calculateHeight = ((NUM_ROWS + 1) *  height of required gridview row) + 50; 
                                                        // adding 50 for spacing.
}
mGridView.getLayoutParams().height = (int) calculateHeight; // setting 
                                                     the final Height of GridView
于 2013-11-13T09:11:33.383 に答える