Android布局\u包裹最小子对象的高度
作为一个更大项目的一部分,我正在尝试创建一个自定义图像库,它将保存来自web的图像。我无法控制它们的大小和布局(顺序、总数[最多十个]和每行数[最多三个])是由我使用的API定义的。我使用嵌套的LinearLayouts以编程方式构建松散的网格,但这是一个XML概念验证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
<?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”。。。。