2013-04-20 32 views
4

我想要在使用ImageView类的GridView布局内布局8x8网格图像,实际上只是40x40px图标。使用ImageView和GridView设置显示在行和列中的图像数量

我试图玩弄的setLayoutParams和ImageView的类的setScaleType方法,但一直没能达到预期的影响。这是我的,但我正在试验只有一个3x3的小图标网格,直到我掌握它。

主要Acitvity:

package com.topherwilso.ropasci; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.GridView; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     GridView gv = (GridView) findViewById(R.id.gridview); 
     gv.setAdapter(new ImageAdapter(getApplicationContext())); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

而且我ImageAdapter类:

package com.topherwilso.ropasci; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.ImageView.ScaleType; 

public class ImageAdapter extends BaseAdapter { 

    int[] images = { 
      R.drawable.one, R.drawable.two, 
      R.drawable.three, R.drawable.four, 
      R.drawable.five, R.drawable.six, 
      R.drawable.seven, R.drawable.eight, 
      R.drawable.nine 
    }; 
    private Context context; 

    public ImageAdapter(Context applicationContext){ 
     context=applicationContext; 
    } 

    @Override 
    public int getCount() { 
     //Number of data elements to be displayed 
     return images.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView iv; 
     if(convertView != null){ 
      iv = (ImageView) convertView; 
     } 
     else{ 
      iv = new ImageView(context); 
      iv.setLayoutParams(new GridView.LayoutParams(120, 120)); 
      iv.setScaleType(ScaleType.CENTER); 
      iv.setPadding(0, 0, 0, 0); 
     } 
     iv.setImageResource(images[position]); 
     return iv; 
    } 

} 

这是什么样子,现在,

What I have now

这就是我想,

enter image description here

+1

http://stackoverflow.com/questions/7298731/when-to-call-activity-context-or-application-context。使用活动的上下文 – Raghunandan 2013-04-20 06:40:49

+0

感谢您的文章,我得到他们在说什么,但我不知道如何在我的代码中实现它。我试过“iv = new ImageView(MainActivity.getActivityContext());”,“iv = new ImageView(MaintActivity);”,“iv = new ImageView(this);”但没有任何工作。 – ChrisWilson4 2013-04-20 07:16:18

+0

上面的链接用于了解何时使用getApplicationContext()以及何时使用活动上下文。它与你的gridview图像无关。 – Raghunandan 2013-04-20 07:18:21

回答

3

尝试下面

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/gridview" 
android:padding="40dp" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:columnWidth="0dp" 
android:numColumns="3" // set the number of columns to 3 
android:verticalSpacing="20dp" 
android:horizontalSpacing="20dp" 
android:gravity="center" 
/> 

http://developer.android.com/guide/topics/ui/layout/gridview.html

http://developer.android.com/reference/android/widget/GridView.html

指定的行的数目是不可能的。如果上述不起作用,您可以使用TableLayout而不是GridView。在你的情况下,你有9个图标,所以设置列号为3应该工作。

对于TableLayout

http://developer.android.com/reference/android/widget/TableLayout.html

+0

哇,谢谢。感觉有时候愚蠢,我已经把numColumns自动。 – ChrisWilson4 2013-04-20 08:12:47

+0

@ ChrisWilson4如果有帮助,请答复答案 – Raghunandan 2013-04-20 08:37:58

相关问题