【问题标题】:How can I add a TextView into an ImageView in GridView Layout?如何在 GridView 布局中将 TextView 添加到 ImageView 中?
【发布时间】:2013-05-03 19:26:45
【问题描述】:

我需要一个 GridView,但在每个网格中,都会有一个 ImageView 和 TextView 上面/里面。

它就像每个网格中的项目图像,以及图像上的项目名称。

我正在努力:

    public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) { // if it's not recycled, initialize some
                                // attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(300, 300));
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageView.setPadding(0, 0, 0, 0);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageResource(mThumbIds[position]);

    TextView nameView = new TextView(mContext);
    nameView.setText("Name");
    nameView.setTextSize(20);

    parent.addView(nameView);

    return imageView;
}

在我的网格视图适配器中。但我不能在这里添加它。我也尝试在 ImageView 中添加它,但由于它不是 ViewGroup,我无法实现。

更新:

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

    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewHolder holder;

    if (convertView == null) { // if it's not recycled, initialize some
                                // attributes
        convertView = inflater.inflate(R.layout.gridviewitem, null, true);
        holder = new ViewHolder();
        holder.image = (ImageView) convertView
                .findViewById(R.id.gridViewItemImage);
        holder.name = (TextView) convertView
                .findViewById(R.id.gridViewItemName);
        holder.price = (TextView) convertView
                .findViewById(R.id.gridViewItemPrice);
        convertView.setTag(holder);

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

    holder.image.setImageResource(mThumbIds[position]);
    holder.name.setText("Item " + String.valueOf(position));
    holder.price.setText("$15");

    return convertView;
}

这解决了我的问题

【问题讨论】:

    标签: android android-gridview


    【解决方案1】:

    创建一个包含ImageView 和TextView 的RelativeLayout,TextView 的底边与Imageview's 底边对齐。

    <RelativeLayout ...>
        <ImageView ...>
        <TextView ...
          android:layout_alignBottom="id of the imageview"> // or to top
    </RelativeLayout>
    

    在适配器的 getView 方法中扩展此布局。

    【讨论】:

    • 膨胀布局后,我应该返回什么?
    • 相对布局将是您的网格视图的项目。所以返回相对布局参考。
    【解决方案2】:
    <RelativeLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    
        <ImageView
            android:id="@+id/grid_outer_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:src="@drawable/image_border" />
    
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" >
    
            <TextView
                android:id="@+id/grid_inner_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="some text" />
        </RelativeLayout>
    
    </RelativeLayout>
    

    【讨论】:

      【解决方案3】:

      只是为了扩展 userSeven7s 的答案,您应该返回 RelativeLayout 而不是 ImageView,以便 GridView 具有 RelativeLayout 作为它的直接子级,而不是 ImageView,RelativeLayout 可以具有 TextView 和 ImageView等等
      可以通过以下方法获取RelativeLayout的对象:

      RelativeLayout rel = (RelativeLayout)View.inflate(R.layout.YOUR_RELATIVE_LAYOUT_XML_HERE);
      

      【讨论】:

      • R.layout.layout_name 还是 R.id.layout_id?
      • 对不起,它必须是布局而不是 id。之后,你的 XML 文件的名称应该会出现,如果你正在使用它,或者你可以动态创建 RelativeLayout 并将视图放入其中,但这会很麻烦。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多