如何以编程方式在图像按钮下方使用 ImageButtons 和 TextViews 创建 gridview

How to programmatically create a gridview with ImageButtons and TextViews below the image buttons

我正在做一个项目,我使用 Xamarin.Android 插件 visual studio 2015 使用 XML 视图。我需要为应用程序创建一个屏幕,其中 ImageButtons 的布局如下图所示,但我需要根据可以更改图像按钮显示内容的列表动态创建它。最终结果看起来像图像,但根据列表中的内容,可能会出现更少的按钮。我不太确定如何解决这个问题,因为我在 xml 中很少使用 GridViews。所以基本上在代码中我到目前为止所得到的是填充列表:

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.MainMenu);
        List<User> configList = new List<User>(user.Configurations);


    }

xml布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:id="@+id/LocationsRoot"
    android:gravity="center_vertical|center_horizontal">
    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:layout_below="@id/toolbar">

        <Space
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/space2"
            android:layout_marginBottom="5dp"
            android:layout_weight="1" />
        <include
            android:id="@+id/bottomtoolbar"
            layout="@layout/toolbarbottom"
            android:layout_weight="0" />
    </LinearLayout>
</RelativeLayout>

因此每个图像按钮都会有不同的图像。图片:

如何以编程方式实现此目的?

这是 Java 中的一种动态方法,可以非常直接地转换为 C#。

Dynamic Grid Layout

您可以动态生成 GridView。

GridView 将根据您的需要包含 ImageView 和 TextView。您将不得不使用自定义适配器。在它的 getView 方法中,填充 ImageView 和 TextView。

示例:

网格视图item.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imgItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/txtItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:fontFamily="trebuchet"
        android:textColor="@android:color/black"
        android:textSize="15sp"
        android:textStyle="bold" />

</LinearLayout>

Java代码:

项目的 POJO class:

public class Item
{
    String title;
    Drawable image;
    //getter setter
}

适配器class:

//getView method in your adapter class

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View itemView = convertView;
    ViewHolder holder = null;

    if (itemView == null)
    {
        final LayoutInflater layoutInflater =
            (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        itemView = layoutInflater.inflate(resourceId, parent, false);

        holder = new ViewHolder();
        holder.imgItem = (ImageView) itemView.findViewById(R.id.imgItem);
        holder.txtItem = (TextView) itemView.findViewById(R.id.txtItem);
        itemView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) itemView.getTag();
    }

    Item item = getItem(position);
    holder.imgItem.setImageDrawable(item.getImage());
    holder.txtItem.setText(item.getTitle());

    return itemView;
}

现在在您的 Activity class 中添加适配器数据,然后将该适配器设置为 GridView。

Refer to this and this

希望对您有所帮助。

信用: @JASON G PETERSON