如何自动调整 GridView 的大小
How to auto size GridView
如何让我的 GridView 自动调整屏幕分辨率。我在虚拟设备上看起来不错,但在我的 phone 上却不行。我尝试了很多设置,但没有任何效果。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<GridView
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="vertical"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="3"
android:stretchMode="columnWidth"
android:padding="5dp"
android:verticalSpacing="5dp"
android:horizontalSpacing="10dp"
android:gravity="center_vertical"
android:layout_marginBottom="100dp"/>
</RelativeLayout>
从 ImageAdapter 获取视图:
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(200, 200));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(R.drawable.card_back);
return imageView;
}
虚拟设备:
Phone
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
为什么是 200dx 而不是 dp。
所以在 Values 文件夹中创建 dimensions.xml,例如
<resources>
<dimen name="gridview">200dp</dimen>
</resources>
然后
int size = mContext.getResources().getDimensionPixelSize(R.dimen.gridview);
imageView.setLayoutParams(new GridView.LayoutParams(size, size));
问题不在于 gridview,问题在于 imageview 本身。
如您所见,您的网格实际上占据了屏幕并用列宽填充了额外的 space。在您的情况下,您必须将图像放在中心。为此,请为您的 imageview 提供一个父级,例如 linearlayout 并将 imageview 对齐到父级的中心。
LinearLayout lLayout=new LinearLayout(context);
lLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lLayout.setGravity(Gravity.CENTER);
lLayout.addView(<your imageview>);
在adapter getview中使用上面的代码
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
LinearLayout lLayout;
if (convertView == null) {
// if it's not recycled, initialize some attributes
lLayout=new LinearLayout(context);
lLayout.setLayoutParams(new LinearLayout.LayoutParams (LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lLayout.setGravity(Gravity.CENTER);
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(8, 8, 8, 8);
lLayout.addView(imageView);
} else {
lLayout= (LinearLayout) convertView;
}
((ImageView)lLayout.getChildAt(0)).setImageResource(R.drawable.card_back);
return lLayout;
}
如何让我的 GridView 自动调整屏幕分辨率。我在虚拟设备上看起来不错,但在我的 phone 上却不行。我尝试了很多设置,但没有任何效果。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<GridView
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="vertical"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="3"
android:stretchMode="columnWidth"
android:padding="5dp"
android:verticalSpacing="5dp"
android:horizontalSpacing="10dp"
android:gravity="center_vertical"
android:layout_marginBottom="100dp"/>
</RelativeLayout>
从 ImageAdapter 获取视图:
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(200, 200));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(R.drawable.card_back);
return imageView;
}
虚拟设备:
Phone
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
为什么是 200dx 而不是 dp。 所以在 Values 文件夹中创建 dimensions.xml,例如
<resources>
<dimen name="gridview">200dp</dimen>
</resources>
然后
int size = mContext.getResources().getDimensionPixelSize(R.dimen.gridview);
imageView.setLayoutParams(new GridView.LayoutParams(size, size));
问题不在于 gridview,问题在于 imageview 本身。
如您所见,您的网格实际上占据了屏幕并用列宽填充了额外的 space。在您的情况下,您必须将图像放在中心。为此,请为您的 imageview 提供一个父级,例如 linearlayout 并将 imageview 对齐到父级的中心。
LinearLayout lLayout=new LinearLayout(context);
lLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lLayout.setGravity(Gravity.CENTER);
lLayout.addView(<your imageview>);
在adapter getview中使用上面的代码
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
LinearLayout lLayout;
if (convertView == null) {
// if it's not recycled, initialize some attributes
lLayout=new LinearLayout(context);
lLayout.setLayoutParams(new LinearLayout.LayoutParams (LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lLayout.setGravity(Gravity.CENTER);
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(8, 8, 8, 8);
lLayout.addView(imageView);
} else {
lLayout= (LinearLayout) convertView;
}
((ImageView)lLayout.getChildAt(0)).setImageResource(R.drawable.card_back);
return lLayout;
}