Android layout_height包装最小的孩子

时间:2014-01-29 02:33:48

标签: android android-layout android-linearlayout android-custom-view

作为大型项目的一部分,我正在尝试创建一个自定义图片库,该图片库将保存来自网络的图片。我无法控制它们的大小和布局(顺序,总数[最多十个],每行数量[最多三个])由我正在使用的API定义。我正在使用嵌套的LinearLayouts以编程方式构建松散的网格,但这是一个XML概念证明......

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:divider="@drawable/photoset_vert_divider"
    android:showDividers="middle">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:divider="@drawable/photoset_horz_divider"
        android:showDividers="middle">

        <ImageView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:layout_gravity="center_vertical"
            android:adjustViewBounds="true"
            android:layout_height="wrap_content"
            android:src="@drawable/tall" />

        <ImageView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:layout_gravity="center_vertical"
            android:adjustViewBounds="true"
            android:layout_height="wrap_content"
            android:src="@drawable/tall" />

        <ImageView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:layout_gravity="center_vertical"
            android:adjustViewBounds="true"
            android:layout_height="wrap_content"
            android:src="@drawable/wide" />
    </LinearLayout>
</LinearLayout>

这是我正在寻找的60%,并且让我

......但这是我的目标:

我想要的是android:layout_height="wrap_smallest_content"类似的东西,它将所有ImageView缩放到正确的大小,然后将它们全部裁剪下来以匹配“最短”的孩子。

2 个答案:

答案 0 :(得分:0)

由于你说你最终将以编程方式进行此操作,所以你总是可以将LinearLayout子类化为在加载时找到包含ImageViews的最小高度,然后将其设置为布局的高度。然后,您对图像的所有操作都将其高度设置为match_parent

答案 1 :(得分:0)

将固定layout_height设置为内部 LinearLayout 确实更好。您可以在XML中执行此操作

如果您专注于各种设备,请在内部 LinearLayout 中添加 id ,然后通过测量设备的屏幕尺寸动态设置LinearLayout尺寸。以编程方式测量屏幕尺寸

通过使用DisplayMetrics,您可以获得任何设备屏幕的高度和宽度。 这是代码。

DisplayMetrics metrics; 
int width = 0, height = 0;

在你的onCreate方法

 metrics = new DisplayMetrics();        
 getWindowManager().getDefaultDisplay().getMetrics(metrics);


 xheight = metrics.heightPixels;        
 xwidth = metrics.widthPixels;

尝试此操作以获得屏幕高度。

然后以编程方式设置内部 LinearLayout

linearLayout.getLayoutParams().height = xheight - 50;

根据 xheight 更改 - 50值

您的xml将更改为此类

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:divider="@drawable/photoset_vert_divider"
    android:showDividers="middle">

    <LinearLayout
        android:id="@"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:divider="@drawable/photoset_horz_divider"
        android:showDividers="middle">

        <ImageView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:layout_gravity="center_vertical"
            android:adjustViewBounds="true"
            android:layout_height="match_parent"
            android:src="@drawable/tall" />

        <ImageView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:layout_gravity="center_vertical"
            android:adjustViewBounds="true"
            android:layout_height="match_parent"
            android:src="@drawable/tall" />

        <ImageView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:layout_gravity="center_vertical"
            android:adjustViewBounds="true"
            android:layout_height="match_parent"
            android:src="@drawable/wide" />
    </LinearLayout>
</LinearLayout>