【问题标题】:How to programmatically create a gridview with ImageButtons and TextViews below the image buttons如何以编程方式在图像按钮下方创建带有 ImageButtons 和 TextViews 的 gridview
【发布时间】:2015-10-30 17:07:43
【问题描述】:

我正在开发一个项目,我正在使用 XML 视图的 Visual Studio 2015 的 Xamarin.Android 插件。我需要为应用程序创建一个屏幕,其中 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>

所以每个图像按钮都会有不同的图像。图片:

如何以编程方式实现这一目标?

【问题讨论】:

  • 最终,您想要一个动态构建的网格视图,每个按钮下都有一些文本?
  • 是的,我需要遍历我的 onCreate 方法中显示的列表才能构建这些图像按钮。
  • 可能希望将其用作参考指南 (code.tutsplus.com/tutorials/…),是的,它在 Java 中,但到 C# 的翻译是直截了当的。
  • 但这并不能真正满足它的动态部分......所以列表可能只包含其中两个按钮,但有时列表可能包含这些按钮的所有八个对象...... .
  • 是的,遍历您的列表,然后添加新的图像按钮

标签: c# android gridview xamarin android-imagebutton


【解决方案1】:

这是一种在 Java 中执行此操作的动态方法,转换为 C# 非常简单。

Dynamic Grid Layout

您可以动态生成 GridView。

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

示例:

GridView 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 类:

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

适配器类:

//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 类中添加适配器数据,然后将该适配器设置为 GridView。

Refer to thisthis

希望对你有帮助。

学分:@JASON G PETERSON

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多