Android布局\u包裹最小子对象的高度

Android布局\u包裹最小子对象的高度,android,android-layout,android-linearlayout,android-custom-view,Android,Android Layout,Android Linearlayout,Android Custom View,作为一个更大项目的一部分,我正在尝试创建一个自定义图像库,它将保存来自web的图像。我无法控制它们的大小和布局(顺序、总数[最多十个]和每行数[最多三个])是由我使用的API定义的。我使用嵌套的LinearLayouts以编程方式构建松散的网格,但这是一个XML概念验证 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

作为一个更大项目的一部分,我正在尝试创建一个自定义图像库,它将保存来自web的图像。我无法控制它们的大小和布局(顺序、总数[最多十个]和每行数[最多三个])是由我使用的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\u height=“wrap\u minimable\u content”之类的东西,它可以将所有图像视图缩放到正确的大小,然后将它们全部裁剪,以匹配“最短”的子对象。

既然你说你最终要以编程方式完成这项工作,您总是可以将LinearLayout子类化,以便在加载时找到包含图像视图的最小高度,然后将其设置为布局的高度。然后,您只需将图像的高度设置为
match\u parent

最好将固定布局高度设置为内部LinearLayout。您可以在XML中执行此操作

如果您关注的是各种设备,则为内部线性布局提供id,然后通过测量设备的屏幕大小动态设置线性布局大小。以编程方式测量屏幕大小的步骤

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

DisplayMetrics metrics; 
int width = 0, height = 0;
在onCreate方法中

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


 xheight = metrics.heightPixels;        
 xwidth = metrics.widthPixels;
尝试此操作以获得屏幕高度

然后以编程方式设置内部线性布局,如下所示

linearLayout.getLayoutParams().height = xheight - 50;
<?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>
根据xheight更改-50值

您的xml将更改为以下内容

linearLayout.getLayoutParams().height = xheight - 50;
<?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>

尝试将此android:scaleType=“centerCrop”替换为android:scaleType=“fitXY”。。。。