开发者

Does anyone know how to put text underneath each image in a gridview?

开发者 https://www.devze.com 2023-02-03 11:11 出处:网络
I need to insert some text underneath each picture in the gridview. Can anyone help withi this? I have tried to put a text view into the getView() but no success. I have commented out my attempt to do

I need to insert some text underneath each picture in the gridview. Can anyone help withi this? I have tried to put a text view into the getView() but no success. I have commented out my attempt to do this.

This is my image adapter code:

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.TextView;


public class ImageAdapter extends BaseAdapter{

    private Context mContext;
    //private String[] texts = {"aaa", "bbb", "ccc", "ddd", "eee", "fff", "eee", "hhh", "iii"};

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() { //Constructor
        return getmThumbIds().length; //+9
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        //TextView tv;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); //Sets height and width for the view - Could use setAdjustViewBounds(boolean). 
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//Image should be cropped towards centre
            imageView.setPadding(8, 8, 8, 8); //Sets padding for all sides
            //tv = new TextView(mContext);开发者_运维问答
            //tv.setLayoutParams(new GridView.LayoutParams(85, 85));
        } else {
            imageView = (ImageView) convertView;
            //tv = (TextView) convertView;
            //tv.setText(texts[position]);
            //return tv;
        }

        imageView.setImageResource(getmThumbIds()[position]); //Chooses image from the array
        return imageView;

    }

    public void setmThumbIds(Integer[] mThumbIds) {
        this.mThumbIds = mThumbIds;
    }

    public Integer[] getmThumbIds() {
        return mThumbIds;
    }

    // references to our images
     Integer[] mThumbIds = {
            R.drawable.puma_boots, R.drawable.cricket_balls,
            R.drawable.darts, R.drawable.paintballing_gloves,
            R.drawable.ice_skates, R.drawable.skate_ramp,
            R.drawable.manu_top, R.drawable.rugby_ball,
            R.drawable.puma_boots, R.drawable.cricket_balls,
            R.drawable.darts, R.drawable.paintballing_gloves,
            R.drawable.ice_skates, R.drawable.skate_ramp,
            R.drawable.manu_top, R.drawable.tennis_racket,
            R.drawable.puma_boots, R.drawable.cricket_balls,
            R.drawable.darts, R.drawable.paintballing_gloves,
            R.drawable.ice_skates, R.drawable.skate_ramp,
            R.drawable.rugby_ball, R.drawable.tennis_racket
    };


}


Your getView() needs to return a LinearLayout (or RelativeLayout or whatever) containing an ImageView and a TextView.


You could use a TextView with a CompoundDrawable on top.

Something like this:

public View getView(int position, View convertView, ViewGroup parent) {
    TextView tv = (TextView)convertView;
    if (tv == null) { 
        tv = new TextView(mContext);
        tv.setLayoutParams(new GridView.LayoutParams(85, 85));
        // add more setup stuff here like padding, textColor, gravity, etc
     }

    tv.setCompoundDrawablesWithIntrinsicBounds(0, getmThumbIds()[position], 0, 0);
    tv.setText(texts[position]);
    return tv;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号