2017-07-04 89 views
0

我試圖以編程方式在網格佈局中放入指定數量的圖像,我希望它們均勻分佈並均勻分佈。每當我嘗試添加多個圖像的網格佈局只顯示一個。我究竟做錯了什麼?網格佈局添加均勻間隔的圖像

XML:

<GridLayout 
     android:id="@+id/gridlayout" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="6" 
     android:gravity="center"/> 

的Java:

//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); 
    } 

顯示的內容: enter image description here

我想要什麼: enter image description here

回答

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> 
  1. 您需要在xml佈局中排第3列。
  2. 你必須設置imageview的寬度和高度。
  3. 高度和寬度可以根據屏幕尺寸計算。您可能不需要高度但寬度是 寬度很重要。

  4. 另一種選擇是根據屏幕大小創建基於資源的背景 的縮放位圖。

enter image description here

+0

是的!這是如此關!唯一的問題是我的網格佈局不像你的那樣是整個屏幕,所以這發生了很多= http://imgur.com/a/jiKAJ。如何通過寬度和高度來適應圖像? – Jared

+0

Nvm!我做的。使用這個「int height = gridLayout.getMeasuredHeight()/ gridLayout.getRowCount();」爲高度,它完美的作品!謝謝 – Jared

+0

我實際上正在處理這個問題。只需要小心你只能通過實現全局佈局監聽器來使用測量高度,或者只是創建一個自定義網格佈局並覆蓋onMeasure方法。我正在更新我的答案 –

0

看看這些屬性

機器人:信息columnCount = 「2」 機器人:rowCount時= 「2」

之前圖像相加到GridView嘗試播放上面列出的屬性。

如果佈局包含1個圖像都設置爲1 如果佈局包含2幅圖像中設置行1和列2。 如果佈局包含3個圖像集行1和列3

如果佈局包含4這兩個設置爲2

等...

+0

那什麼也沒做。同時添加指定數量的列也不起作用。 – Jared

+0

你可以添加一張你想要的圖片嗎?或類似。 –

+0

我添加了圖片:) – Jared