我有一个ListView。每行是图像和文本。我想缩放图像,使其适合行高,即
我想出的所有解决方案看起来都太复杂了,我认为这是一个相对常见的要求,所以我想检查一下我是否遗漏了某些东西 - 你知道如何以更简单的方式实现这一目标?
以下是我考虑的解决方案。
解决方案1:
ListView项的嵌套视图并设置android:layout_height =" match_parent"。 图像大小正确,但ImageView占用的宽度就像没有调整大小一样。 (见下图。我添加了黑色背景,看看ImageView占用了多少空间。)
<RelativeLayout 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="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView android:id="@+id/Image"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitStart"
android:background="#000000"
android:padding="1dp"/>
<TextView
android:id="@+id/Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/Image" />
</LinearLayout>
</RelativeLayout>
解决方案2: 使用
ViewTreeObserver observer = MyTextView.getViewTreeObserver() observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
public boolean onPreDraw(){
observer.removeOnPreDrawListener(this);
// Finding out height of TextView and then calculating width and height of image and setting size of ImageView. Of course, I could also get observer from ImageView and then just set width as height is correct
}
}
这似乎太复杂了。
解决方案3:
使用,例如,Paint.FontMetrics来计算高度,但我还需要找出所使用的字体(例如,系统一......)同时ListView可能还有一些填充等等。要检索的东西。
还有其他更简单的解决方案吗?
修改 - 澄清
图片有最大值size,如果达到,则停止进一步增加ImageView的大小。
答案 0 :(得分:0)
如果您想根据宽度和高度设置ImageView的宽度和高度,您可以始终以编程方式获取TextView
的宽度和高度,然后实现自己的算法以相应地缩放ImageView 。
要从textView获取宽度和高度,我们称之为item_textView
,这很简单:
TextView item_textView = findViewById(R.id.item_textView);
int text_width = item_textView.getWidth();
int text_height = item_textView.getHeight();
此时,您可以执行需要执行的任何数学运算,以将imageView缩小到正确的大小。要设置imageView的大小:
my_imageView.getLayoutParams().width = text_width/2;
my_imageView.getLayoutParams().height = text_height/2;
答案 1 :(得分:0)
由于您将父线性布局高度定义为换行内容,因此它将采用其内容的大小,并可能根据其子元素维度而有所不同。
尝试为行布局中的图片定义确切尺寸。 如果您可以将其宽度和高度定义为40dp或48dp,那么您可以实现目标。
如果所有元素都依赖于彼此的大小,您可能会看到变化。尝试使用特定的 dp 定义头像/图像大小。
我试图调整你的布局并得到一些结果。请查看以下代码。
<?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="wrap_content"
android:orientation="horizontal"
android:padding="16dp">
<ImageView
android:id="@+id/earthquake_magnitude"
android:layout_width="36dp"
android:layout_height="36dp"
android:background="@android:color/black"
android:fontFamily="sans-serif-medium"
android:src="@mipmap/ic_launcher" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="16dp"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="CHROME" />
</LinearLayout>