Android 带图像和文本的gridview

Android 带图像和文本的gridview,android,gridview,Android,Gridview,我成功地创建了一个用图像填充的gridview。现在,我想做的是在图像下面放一个文本 这是到目前为止我的应用程序的屏幕截图 下面是imageadapter类中的getView方法 public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { imageView = new ImageView(this.con

我成功地创建了一个用图像填充的gridview。现在,我想做的是在图像下面放一个文本

这是到目前为止我的应用程序的屏幕截图

下面是imageadapter类中的getView方法

public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;

if (convertView == null) {
    imageView = new ImageView(this.context);
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8, 8, 8, 8);
} else {
    imageView = (ImageView) convertView;
}

imageView.setImageResource(this.thumbs[position]);
return imageView;
}
以下是我主要活动的onCreate方法

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.launchFullScreen();
    this.setContentView(R.layout.main);

    this.grids = (GridView) this.findViewById(R.id.elements);

    ImageAdapter adapter = new ImageAdapter(this);

    this.grids.setAdapter(adapter);

    this.grids.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {

        }
    });
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
这是。启动全屏();
这个.setContentView(R.layout.main);
this.grids=(GridView)this.findviewbyd(R.id.elements);
ImageAdapter=新的ImageAdapter(此);
this.grids.setAdapter(适配器);
this.grids.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
}
});
}

提前感谢。:)

您可以使用定义
GridView
单元格的XML来执行此操作:

image.xml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
    >
    <ImageView
        android:id="@+id/image"
        android:layout_marginBottom = "10dp"
        android:src="@drawable/cell_sfondo"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </ImageView>

<TextView
        android:id="@+id/title" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

您可以
充气布局
将适配器中imageview下的textview设置为:

if(convertView==null){
            inflater=(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            holder=new Holder();
            convertView=inflater.inflate(R.layout.gridinflater, null);
            holder.imageView=(ImageView) convertView.findViewById(R.id.img);

            holder.textView=(TextView) convertView.findViewById(R.id.txt);

            convertView.setTag(holder);
        }
        else {
            holder = (Holder) convertView.getTag();
        }
其中,
gridInflater
是相对布局中imageview下的textview作为父布局

public static class Holder {
        public ImageViewProgress imageView;
        public TextView textView;
    }

不应直接使用图像视图,而应按如下方式展开视图:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/widget44"android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:orientation="vertical"
 android:layout_x="201px"
 android:layout_y="165px"
 android:gravity="center_horizontal">
<ImageView
   android:id="@+id/icon_image"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
</ImageView>
<TextView
   android:id="@+id/icon_text"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="TextView"
   android:gravity="center_horizontal"
   android:textColorHighlight="#656565">
</TextView>
</LinearLayout>

如需进一步参考,请查看此帖子

您可以在网格布局的每个单元格中为图像和文本创建布局。我建议从xml扩展布局。您可以尝试这样做:

//Use a viewHolder to optimize the list
ViewHolder holder = null;

if (convertView == null) {
   //Create a new view holder to optimize the loading of elements in list
   holder = new ViewHolder();

   convertView = LayoutInflater.from(this.context).inflate(R.layout.my_custom_xml,null) ;
   holder.imageView = (ImageView)convertView.findViewByID(R.id.my_image_view);
   holder.textView = (TextView)convertView.findViewByID(R.id.my_text_view);

   convertView.setTag(holder);
} else {
   holder = (ViewHolder)convertView.getTag();
}

//Bind data to the row

//Set the position in holder
holder.position = position;
//Set the image for each row
holder.imageView ...
//Set the text for each row
holder.textView.setText()...


//And the viewholder looks like this

private class ViewHolder{
//The position of this row in list
private int position;

//The image view for each row
private ImageView imageView;

//The textView for each row
private TextView textView;
}
现在,您只需创建my_custom_xml,其中包含文本和图像视图:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width= "fill_parent"
    android:layout_height = "wrap_content"
    android:orientation= "vertical">
       <ImageView
           android:id = "@+id/my_image_view"
           android:layout_width =  ....
           android:layout_height = ...
       />
      <TextView
          android:id = "@+id/my_text_view"
          android:layout_width = ....
          android:layout_height = ....
       />
</LinearLayout>


Paresh Mayani有一个非常好且简单的例子。这对我帮助很大


啊,好的,所以我必须创建一个单独的布局,比如image.xml。我相信这与我的main.xml不同,对吗?是的,创建image.xml并将单元格的布局放入其中,然后将其膨胀。此链接将帮助您..我正是这样做的,但我没有收到任何事件。它永远不会进入听众的耳朵。知道为什么吗?请注意,不鼓励只链接答案,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移往往会变得陈旧)。请考虑在这里添加一个独立的概要,将链接作为参考。
//Use a viewHolder to optimize the list
ViewHolder holder = null;

if (convertView == null) {
   //Create a new view holder to optimize the loading of elements in list
   holder = new ViewHolder();

   convertView = LayoutInflater.from(this.context).inflate(R.layout.my_custom_xml,null) ;
   holder.imageView = (ImageView)convertView.findViewByID(R.id.my_image_view);
   holder.textView = (TextView)convertView.findViewByID(R.id.my_text_view);

   convertView.setTag(holder);
} else {
   holder = (ViewHolder)convertView.getTag();
}

//Bind data to the row

//Set the position in holder
holder.position = position;
//Set the image for each row
holder.imageView ...
//Set the text for each row
holder.textView.setText()...


//And the viewholder looks like this

private class ViewHolder{
//The position of this row in list
private int position;

//The image view for each row
private ImageView imageView;

//The textView for each row
private TextView textView;
}
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width= "fill_parent"
    android:layout_height = "wrap_content"
    android:orientation= "vertical">
       <ImageView
           android:id = "@+id/my_image_view"
           android:layout_width =  ....
           android:layout_height = ...
       />
      <TextView
          android:id = "@+id/my_text_view"
          android:layout_width = ....
          android:layout_height = ....
       />
</LinearLayout>