我想更好地了解Gridview工作方式,特别是auto_fit.这是XML布局:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnWidth="60dp"
android:numColumns="auto_fit"
/>
Run Code Online (Sandbox Code Playgroud)
它可以通过一系列六个缩略图(48*48像素)正常工作.在纵向模式下,它显示一行,六列.

我不明白为什么这条线android:columnWidth="60dp"是必要的,因为auto_fit应该找到正确数量的列.
如果没有该行android:columnWidth="60dp",它将显示一个3行和2列的网格.

这是ImageAdapter班级:
package com.examples.HelloGridView;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
} …Run Code Online (Sandbox Code Playgroud) 我想做一个类似于这个的布局:
www.ImageBanana.net - layout.png http://www.imagebanana.com/img/9kmlhy66/thumb/layout.png
屏幕上有四个方形按钮 - 每个按钮使用屏幕的一半/屏幕高度(以较小者为准).与屏幕尺寸/分辨率无关.
我已经尝试通过使用a实现这一点,LinearLayout但按钮最终使用正确的宽度,但仍然具有背景的高度(不再是正方形).
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_height="wrap_content"
style="@style/CKMainButton"
android:layout_width="fill_parent"
android:text="@string/sights"
android:id="@+id/ApplicationMainSight"
android:layout_toLeftOf="@+id/ApplicationMainEvent"></Button>
<Button
android:layout_height="wrap_content"
style="@style/CKMainButton"
android:layout_width="fill_parent"
android:text="@string/sights"
android:id="@+id/ApplicationMainSight"
android:layout_toLeftOf="@+id/ApplicationMainEvent"></Button>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_height="wrap_content"
style="@style/CKMainButton"
android:layout_weight="1"
android:layout_width="fill_parent"
android:text="@string/usergenerated"
android:id="@+id/ApplicationMainUserGenerated" />
<Button
android:layout_height="wrap_content"
style="@style/CKMainButton"
android:layout_weight="1"
android:layout_width="fill_parent"
android:text="@string/tours"
android:id="@+id/ApplicationMainTour"/>
</LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:www.ImageBanana.net - layout2.png http://www.imagebanana.com/img/i2ni6g4/thumb/layout2.png
我怎样才能使布局看起来像上面的图像?
我有一个自定义gridview与这样的项目
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="center"
android:longClickable="false"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:longClickable="false"
android:text="0"
android:textSize="60sp" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我希望我的项目是正方形,我希望gridview拉伸宽度以纵向填充屏幕的所有宽度和横向的所有高度.它看起来应该是这样的

其中A - 是正方形的边,B是边距宽度(可以是零).我认为我应该覆盖onMeasure方法,但究竟应该怎么做?也许有人可以帮忙吗?
编辑确定,我试图在适配器的getView方法中手动设置项目的宽度和高度,它更好,但它仍然不是我想要的.如何摆脱列之间的间距?

我想创建一个正方形图像的网格,但是无法使图像按需要显示。我从GridView教程开始:
http://developer.android.com/resources/tutorials/views/hello-gridview.html
这似乎很接近我想要的。
我能看到的唯一区别是,我需要恰好18张图像,并且它们都必须为正方形。我将列数设置为3,然后加载18张图像,然后应在6行中。我希望图像完全填满每一行,并且不要留下任何多余的多余尺寸的间隙。在将图像下载到手机之前,我不知道它们的大小。希望它们一开始会接近正方形,但是我需要裁剪中心使其完全正方形,然后缩放它们以完全填充3列。我需要图像以保留其长宽比。
我似乎找不到使这项工作可用的设置或代码。图像重叠,有缝隙,无法正确缩放或其他错误。
当我的模拟器设置为480x800时,我得到的最接近的是通过如下更改GridView教程:
imageView.setLayoutParams(new GridView.LayoutParams(480/3,480/3));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(0,0,0,0);
imageView.setAdjustViewBounds(true);
====
<网格视图
xmlns:android =“ http://schemas.android.com/apk/res/android”
android:id =“ @ + id / gridview”
android:layout_width =“ fill_parent”
android:layout_height =“ fill_parent”
android:numColumns =“ 3”
android:stretchMode =“ columnWidth”
android:gravity =“ fill | clip_horizontal | clip_vertical”
/>
这几乎是正确的。我正在使用的方形测试图像缺少几个像素,非方形图像没有被裁剪,而是在内部用黑框保留下来以保持比率,并且硬编码的值很脆弱,无法在所有手机,方向或布局。我觉得很有趣,CENTER_CROP文档似乎声称它将通过扩展以适合图像来实现我想要的功能,但是似乎对CENTER_INSIDE而言。
我感觉很亲密,但从没有得到想要的东西。也许我应该使用GridView以外的其他工具?有什么建议么?
请不要贪吃。
谢谢。
我一直在尝试设置位图很长时间以使其适合ImageView边界.
它只是无法正常工作scaleType: fitXY.我的位图图像大小低于ImageView's(保存在100X100像素),我希望我的位图图像适合并伸展到ImageView.
这是一些代码:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageView"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:src="@drawable/locked_image"
android:scaleType="fitXY"
/>
Run Code Online (Sandbox Code Playgroud)
这是设置的代码ImageView(我scaleType在不同的地方设置测试):
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ImageView imageView;
if (convertView == null) {
imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
imageView.setScaleType(ScaleType.FIT_XY);
} else {
imageView = (ImageView) convertView;
imageView.setScaleType(ScaleType.FIT_XY);
}
imageLoader.displayImage(imagesIds[position], imageView, options);
imageView.setScaleType(ScaleType.FIT_XY);
return imageView;
}
Run Code Online (Sandbox Code Playgroud)
以下是它的外观:

正如你所看到的,高度ImageView很好,但我想它的宽度是一样的.我无法通过我的活动访问我的位图图像,所以请不要让我调整我的位图大小.我真的不明白为什么它不能正常工作.
编辑:
只是为了使问题更容易理解.ImageView计算每个设备的高度.每个设备都不同.我希望我的宽度ImageView与它的高度相同.我正在使用该Two-WayGridView库来显示图像,如果它有任何区别.