作为大型项目的一部分,我正在尝试创建一个自定义图片库,该图片库将保存来自网络的图片。我无法控制它们的大小和布局(顺序,总数[最多十个],每行数量[最多三个])由我正在使用的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缩放到正确的大小,然后将它们全部裁剪下来以匹配“最短”的孩子。
答案 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>