如何以编程方式在图像按钮下方使用 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
我正在做一个项目,我使用 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