android - 让 GridView 项目完全正方形

标签 android android-layout gridview android-listview

我正在使用 GridView 来显示我的数据 [即图像及其标题]

我的图像是用我的图像加载器库动态加载的。问题是我的一些图像是横向或纵向的。由于这个原因,我的网格元素不保持精确的平方比。有些垂直拉伸(stretch)或以其他方式压缩。

<GridView
    android:id="@+id/fcpl_grid_listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:numColumns="2"
    android:scrollingCache="false"/>

这是我的 getView 方法:

 public View getView(final int position, View convertView, final ViewGroup parent) {
            final ViewHolder viewholder;
            Log.e("Calling...","getView");
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.inflater_product_list, parent, false);
                viewholder = new ViewHolder();
                viewholder.productImage = (ImageView) convertView.findViewById(R.id.ipl_imageview);
                viewholder.backGroundLayout = (RelativeLayout) convertView.findViewById(R.id.ipl_bk_layout);
                viewholder.productName = (TextView) convertView.findViewById(R.id.ipl_productname);
                convertView.setTag(viewholder);
            } else {
                viewholder = (ViewHolder) convertView.getTag();
            }
            viewholder.productName.setText("SOME TEXT");
            String imageUrl = "SOME URL";
            imageLoader.get(imageUrl, VALUES_FOR_MY_IMAGE_LOADER_LIBRARY));
            return convertView;
        }

我在网上尝试了不同的建议方法,但都没有用,因为我有动态图像加载,并且在调用 getView 时不知道 imageView layoutParams。

最佳答案

我建议您创建扩展 ImageView(或 GridView)的类并测量 Root View 或任何其他父 View 的边界。然后只需在您的项目 xml 中使用它。

public class SquareImageView extends ImageView {
    public SquareImageView(Context context) {
        super(context);
    }

    public SquareImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        View rootView = this.getRootView();
        if (rootView != null) {
            width = rootView.getWidth();
            height = rootView.getHeight();
        }
        int size = width > height ? height : width;
        super.onMeasure(size, size);
        setMeasuredDimension(size, size);
    }
}

关于android - 让 GridView 项目完全正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21573554/

相关文章:

android - NFC-A 和 NFC Forum 标签类型 1 之间的区别

java - CoordinatorLayout 无法转换为 android.support.v7.widget.Toolbar

javascript - 使用 JavaScript 进行 GridView 计算

android - 如何在通知管理器(Android)中创建动态ID?

java - Android 中使用 GoogleAPI 进行音译

android - 如何获取 ActionBar MenuItem 的当前位置?

Android Studio XML 文本未在 ConstraintLayout 内居中

android - 对齐相对布局内的复选框

html - 视口(viewport)不起作用

android - android中第二次观察viewmodel返回null