我在Android应用程序中有一个行为不端的布局。现在,它看起来像这样:
这个想法是让3张图像的反射作为单独的图像排列在它们下面。如果我只有图像(只有第一个嵌套的LinearLayout,如下所示),那么图像显示就好了,它们的原始分辨率和均匀分布。但是,在(反射)中添加了第二个线性布局后,图像显示的范围要小得多。
图片中的那些反射图像显示正确的尺寸,图像应该与反射一样宽,原生。如果它们正确显示,那么反射底部的图像顶部应该填满屏幕的高度。但他们不是。我在imageviews和linearlayouts(也是不同的scaleTypes)上尝试了很多layout_width和layout_height的组合,但没有什么能阻止图像因某些原因而缩小。任何人都可以建议为什么?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- IMAGES -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<!-- IMAGE REFLECTIONS -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
此外,我并没有停止使用LinearLayouts,因此欢迎使用替代方案。
更新
这是它添加到每个ImageView的背景颜色的外观:
......这就是它应该看起来的样子。这是通过将每个海报ImageView的layout_width和layout_height分别设置为333px和500px来实现的。但我不想这样做。当屏幕上显示的图像少于3张时,它会导致海报和反射之间出现水平对齐问题:
答案 0 :(得分:0)
尝试这样做,我只是为父线性布局增加了重量......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- IMAGES -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:weightSum="3" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<!-- IMAGE REFLECTIONS -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:weightSum="3" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
答案 1 :(得分:0)
将所有ImageView的layout_width更改为0px,例如:
原因是,如果layout_width不是0(这取决于Android版本),android将不会调查layout_weight
除此之外,请确保您的图片足够大(以像素为单位),如果您无法保证,您可能需要根据需要扩展ImageView:
你有一个固定的宽高比(最容易写)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(
(int) (MeasureSpec.getSize(widthMeasureSpec) * ASPECT_RATIO),
MeasureSpec.EXACTLY));
}
您希望图片根据您的源图像的aspectratio调整它的高度(开始查看here)
根据您上面的决定设置scaleType(link)
答案 2 :(得分:0)
试试这个,只需将ImageView
的宽度设置为0dp
即可。并且还要查看此链接LinearLayout to build a row of elements.,这对于进一步使用非常有用。
<!-- IMAGES -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<!-- IMAGE REFLECTIONS -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
答案 3 :(得分:0)
我发布这个作为第二个答案,因为我假设错误在另一个部分: 您的屏幕高度可能不足以容纳正常图像+反射,因此第一行被压扁并且图像按比例缩小以匹配宽高比。尝试将其包装在ScrollView中,这应该可以解决问题,但可能不是您想要的结果。这是代码:
请注意,我将包装LinearLayout的layout_height更改为wrap_content
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- IMAGES -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
<!-- IMAGE REFLECTIONS -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3">
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
答案 4 :(得分:0)
我找不到一种方法来完成这项工作,所以我最终只是明确地将海报的宽度和高度设置为它们的像素值。实际上我最终也完全采用了一种不同的,更简单的布局,一种是以RelativeLayout为根,包含六个ImageViews(3张海报及其反射)。尽管海报萎缩效应仍然存在。
如果有人知道如何解决这个问题,请告诉我。
答案 5 :(得分:0)
如果您的ImageView在加载电影海报图片之前显示占位符图像(例如在android:src属性中),则缩小的可能原因是您的占位符图像与电影的宽高比不同海报图片。
ImageView中似乎存在一个错误,有时图像会调整为与占位符图像相同的宽高比。
尝试将占位符图片的大小调整为与电影海报图片相同的宽高比。