Android 栅格布局添加等距图像

Android 栅格布局添加等距图像,android,image,gridview,grid-layout,Android,Image,Gridview,Grid Layout,我试图以编程方式将指定数量的图像放入网格布局中,并希望它们的大小和分布均匀。每当我尝试添加多个图像时,网格布局仅显示一个。我做错了什么 XML: 爪哇: //reset data and grid data.clear(); gridLayout.removeAllViews(); Random random = new Random(); for(int i = 0; i < num; i++){ data.add(String.fo

我试图以编程方式将指定数量的图像放入网格布局中,并希望它们的大小和分布均匀。每当我尝试添加多个图像时,网格布局仅显示一个。我做错了什么

XML:


爪哇:

//reset data and grid
    data.clear();
    gridLayout.removeAllViews();

    Random random = new Random();
    for(int i = 0; i < num; i++){
        data.add(String.format("%." + 0 + "f", random.nextDouble() * (6 - 1) + 1));
        ImageView imageView = new ImageView(getContext());
        switch (data.get(i)) {
            case "1":
                imageView.setImageResource(R.drawable.dice1);
                break;
            case "2":
                imageView.setImageResource(R.drawable.dice2);
                break;
            case "3":
                imageView.setImageResource(R.drawable.dice3);
                break;
            case "4":
                imageView.setImageResource(R.drawable.dice4);
                break;
            case "5":
                imageView.setImageResource(R.drawable.dice5);
                break;
            default:
                imageView.setImageResource(R.drawable.dice6);
                break;
        }
        gridLayout.addView(imageView, i);
    }
//重置数据和网格
data.clear();
gridLayout.removeAllViews();
随机=新随机();
for(int i=0;i
结果是:

我想要的是:
看看这些属性

android:columnCount=“2” android:rowCount=“2”

在将图像添加到gridview之前,请尝试播放上面列出的属性

如果布局包含1个图像,则将两者都设置为1 如果布局包含2个图像,则将行设置为1,将列设置为2。 如果布局包含3个图像,则将行设置为1,将列设置为3

如果布局包含4,则将两者都设置为2


等等。

看看这些属性

android:columnCount=“2” android:rowCount=“2”

在将图像添加到gridview之前,请尝试播放上面列出的属性

如果布局包含1个图像,则将两者都设置为1 如果布局包含2个图像,则将行设置为1,将列设置为2。 如果布局包含3个图像,则将行设置为1,将列设置为3

如果布局包含4,则将两者都设置为2

等等。

[![屏幕截图][1][1]

package com.plumtestongo.sample;

import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.ViewTreeObserver;
import android.widget.GridLayout;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.Random;

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final GridLayout layout = (GridLayout) findViewById(R.id.gridlayout);
        ViewTreeObserver vto = layout.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                    layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                } else {
                    layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                }
                int width = layout.getMeasuredWidth();
                int height = layout.getMeasuredHeight();
                setViews(height, width);

            }
        });
    }


    private void setViews(int layoutHeight, int layoutWidth) {

        int width = layoutWidth / 3;
        int height = layoutHeight / 2;
        Log.i(getClass().getName(), "Image height" + height + " Width:" + width);
        ArrayList<String> data = new ArrayList<>();
        data.clear();
        GridLayout gridLayout = (GridLayout) findViewById(R.id.gridlayout);
        gridLayout.removeAllViews();
        Random random = new Random();
        int num = 6;
        for (int i = 0; i < num; i++) {
            data.add(String.format("%." + 0 + "f", random.nextDouble() * (6 - 1) + 1));
            ImageView imageView = new ImageView(this);
            GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
            layoutParams.width = width;
            layoutParams.height = height;
            imageView.setLayoutParams(layoutParams);
            switch (data.get(i)) {
                case "1":
                    imageView.setImageResource(R.drawable.dice2);
                    break;
                case "2":
                    imageView.setImageResource(R.drawable.dice2);
                    break;
                case "3":
                    imageView.setImageResource(R.drawable.dice2);
                    break;
                case "4":
                    imageView.setImageResource(R.drawable.dice2);
                    break;
                case "5":
                    imageView.setImageResource(R.drawable.dice2);
                    break;
                default:
                    imageView.setImageResource(R.drawable.dice2);
                    break;
            }
            gridLayout.addView(imageView, i);
        }
    }

}



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

      android:layout_width="match_parent"
      android:layout_height="match_parent">

    <GridLayout
        android:id="@+id/gridlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnCount="3"
        android:padding="10dp"
        android:gravity="center"/>


</LinearLayout>
package com.plumtestongo.sample;
导入android.os.Build;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.view.ViewTreeObserver;
导入android.widget.GridLayout;
导入android.widget.ImageView;
导入java.util.ArrayList;
导入java.util.Random;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终GridLayout=(GridLayout)findViewById(R.id.GridLayout);
ViewTreeObserver vto=layout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(新的ViewTreeObserver.OnGlobalLayoutListener(){
@凌驾
公共图书馆{
if(Build.VERSION.SDK\u INT
  • xml布局中需要第3行第3列
  • 您必须设置imageview的宽度和高度
  • 可以根据屏幕大小计算高度和宽度。您可能无法 需要高度,但宽度很重要

  • 另一个选项是为背景创建缩放位图 基于屏幕大小的资源

  • [![屏幕截图][1][1]

    package com.plumtestongo.sample;
    
    import android.os.Build;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.ViewTreeObserver;
    import android.widget.GridLayout;
    import android.widget.ImageView;
    
    import java.util.ArrayList;
    import java.util.Random;
    
    public class MainActivity extends AppCompatActivity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            final GridLayout layout = (GridLayout) findViewById(R.id.gridlayout);
            ViewTreeObserver vto = layout.getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                        layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    } else {
                        layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    }
                    int width = layout.getMeasuredWidth();
                    int height = layout.getMeasuredHeight();
                    setViews(height, width);
    
                }
            });
        }
    
    
        private void setViews(int layoutHeight, int layoutWidth) {
    
            int width = layoutWidth / 3;
            int height = layoutHeight / 2;
            Log.i(getClass().getName(), "Image height" + height + " Width:" + width);
            ArrayList<String> data = new ArrayList<>();
            data.clear();
            GridLayout gridLayout = (GridLayout) findViewById(R.id.gridlayout);
            gridLayout.removeAllViews();
            Random random = new Random();
            int num = 6;
            for (int i = 0; i < num; i++) {
                data.add(String.format("%." + 0 + "f", random.nextDouble() * (6 - 1) + 1));
                ImageView imageView = new ImageView(this);
                GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
                layoutParams.width = width;
                layoutParams.height = height;
                imageView.setLayoutParams(layoutParams);
                switch (data.get(i)) {
                    case "1":
                        imageView.setImageResource(R.drawable.dice2);
                        break;
                    case "2":
                        imageView.setImageResource(R.drawable.dice2);
                        break;
                    case "3":
                        imageView.setImageResource(R.drawable.dice2);
                        break;
                    case "4":
                        imageView.setImageResource(R.drawable.dice2);
                        break;
                    case "5":
                        imageView.setImageResource(R.drawable.dice2);
                        break;
                    default:
                        imageView.setImageResource(R.drawable.dice2);
                        break;
                }
                gridLayout.addView(imageView, i);
            }
        }
    
    }
    
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    
          android:layout_width="match_parent"
          android:layout_height="match_parent">
    
        <GridLayout
            android:id="@+id/gridlayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:columnCount="3"
            android:padding="10dp"
            android:gravity="center"/>
    
    
    </LinearLayout>
    
    package com.plumtestongo.sample;
    导入android.os.Build;
    导入android.os.Bundle;
    导入android.support.v7.app.AppActivity;
    导入android.util.Log;
    导入android.view.ViewTreeObserver;
    导入android.widget.GridLayout;
    导入android.widget.ImageView;
    导入java.util.ArrayList;
    导入java.util.Random;
    公共类MainActivity扩展了AppCompatActivity{
    @凌驾
    创建时受保护的空(Bun