在Android中,无法在XML中设置膨胀视图的布局宽度、高度和权重。

8
我正在开发一款Android应用程序。在我的应用程序中,我需要动态地填充视图列表。我已经添加了它们并且正在工作。问题是设置布局的宽度和高度。现在我将用一个简单的项目演示我的问题。实际上,我的项目比这个简单的项目复杂得多。
我正在将视图填充到这个布局中。
           <LinearLayout
                android:orientation="horizontal"
                android:id="@+id/cm_photos_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

            </LinearLayout>

我正在循环遍历一个位图列表,并按如下方式动态地添加视图。
for(Bitmap bmp : bitmaps)
{
     View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null);
                ImageView previewImageView = (ImageView)preview.findViewById(R.id.item_cm_preview_image);
                previewImageView.setImageBitmap(bmp);
     container.addView(preview);
}

请注意,在上面的代码中,container是一个动态添加到上面父级XML中的LinearLayout。
container = new LinearLayout(this);
                    container.setOrientation(LinearLayout.HORIZONTAL);
                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                    container.setLayoutParams(params);

parentLinearLayout.addView(container);

这是我的item_cm_preview_image.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_weight="1"
    android:layout_height="400dp"
    android:layout_width="0dp"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView
        android:scaleType="centerCrop"
        android:id="@+id/item_cm_preview_image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

正如您所见,我在XML中将布局高度设置为400dp,宽度为0,布局权重为1。因此,所有图像的高度必须相同,宽度必须相等,因为有布局权重。但结果并不如预期。您可以在下面看到截图。

enter image description here

正如您在截图中所看到的那样,layout_weight和height并不能作用于所有充气视图。但是,如果我动态地添加额外的ViewGroup并将视图充气到该布局中,则可以起作用。以下是我的代码。
//This happening in for loop
LinearLayout wrapper = new LinearLayout(this);
                wrapper.setLayoutParams(new LinearLayout.LayoutParams(0,500,1));

                View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null);
                ImageView previewImageView = (ImageView)preview.findViewById(R.id.item_cm_preview_image);
                previewImageView.setImageBitmap(bmp);

                wrapper.addView(preview);
                container.addView(wrapper);

这是结果:

enter image description here

正如您所看到的,当我使用额外的动态线性布局时,布局权重和高度都起作用。为什么在XML中设置布局权重和高度不起作用?为什么第二种方法有效?我如何在XML布局文件中设置权重和高度?这是否可能?

1个回答

34
如果您使用该方法来填充布局
View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null);

它跳过了它的宽度和高度参数,但如果你使用:

View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,parent,false);

它应该能够正确工作,例如如果您在活动中将视图膨胀为父视图,则可以提供(ViewGroup)getView():

View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,(ViewGroup) getView(), false);

1
哦,非常感谢。我已经让它工作了。这正是我想知道的。谢谢。 - Wai Yan Hein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接