我目前正在实现一个 GridView,它连接到一个包含任意数量元素的自定义适配器。
然后,这些元素中的每一个都显示在一个自定义 ViewGroup 中,该 ViewGroup 由一个带有 ImageView 和两个 TextView 的垂直 LinearLayout 组成。我正在根据可用的屏幕空间计算 ViewGroup 的宽度,并希望将其在网格内水平和垂直居中。问题是项目显示在屏幕的最左边(没有任何填充)和屏幕的最右边(也没有任何填充)。如果我为整个 GridView 设置填充或边距,滚动条将位于项目的侧面,而不是看起来很糟糕的屏幕边框。这就是为什么我不想为 GridView 设置填充但将其中的元素居中。
这是我的 GridView 代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/launchLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.markupartist.android.widget.ActionBar
android:id="@+id/actionbar"
style="@style/ActionBar"
/>
<GridView
android:id="@+id/grid"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:verticalSpacing="@dimen/launch_grid_padding"
android:horizontalSpacing="@dimen/launch_grid_padding"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:gravity="center"
android:listSelector="#00000000"
android:layout_marginTop="@dimen/launch_grid_padding"
android:layout_marginBottom="@dimen/launch_grid_padding"
/>
</LinearLayout>
</RelativeLayout>
@dimen/launch_grid_padding 的值为 20dp。
这是我的自定义 ViewGroup 的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/rounded_box"
android:layout_gravity="center"
>
<ImageView
android:id="@+id/img"
android:layout_width="120dp"
android:layout_height="84dp"
android:scaleType="centerInside"
/>
<TextView
android:id="@+id/identifier1"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:gravity="left|center_vertical"
android:typeface="sans"
android:textStyle="bold"
android:textColor="#333333"
android:textSize="12dp"
android:lines="1"
android:ellipsize="marquee"
/>
<TextView
android:id="@+id/identifier2"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:textColor="#333333"
android:background="@android:color/white"
android:gravity="left|center_vertical"
android:textSize="10dp"
android:lines="1"
/>
</LinearLayout>
这或多或少是我想要完成的(使用可变数量的项目):
http://www.appdesignvault.com/wp-content/uploads/2012/04/iphone-app-design-bizapp-5.jpg
任何帮助将不胜感激!