我的父母LinearLayout
里面有ImageView
和孩子LinearLayout
。 LinearLayout
子项中包含可以具有不同长度的文本。我希望ImageView
总是具有相同的大小(200dpx200dp),并且如果子LinearLayout的文本溢出,则只按比例缩小。
为此,我在ImageView子级中使用了layout_weight
和maxHeight
,但由于layout_weight,maxHeight无法正常工作。当子ImageView
的文本没有溢出时,LinearLayout
不是平方的,而是显示为矩形。
我怎么能这样做?
这是代码
<ImageView
android:id="@+id/charImage"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_width="wrap_content"
android:maxWidth="200dp"
android:maxHeight="200dp"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/jon_snow" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="vertical">
----some childs----
</LinearLayout>
它应该是这样的,一个正方形 ImageView,下面有一些文字,与文字的长度无关。
我试图修改自定义ImageView的onMeasure(),但它没有正确调整大小,它占用了LinearLayout子节点的一些空间并且文本溢出
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height = Math.min(widthMeasureSpec, Math.min(heightMeasureSpec, dpToPx(200)));
setMeasuredDimension(height, height);
}
private int dpToPx(int dp){
float density = getResources().getDisplayMetrics().density;
return Math.round((float)dp * density);
}
答案 0 :(得分:0)
没有承诺图像将被平方,因为它的最大宽度和高度是平方的。所有这些意味着如果它在两个方向上填充其最大尺寸,那么它将是方形的。如果你想确保它的平方,子类ImageView并覆盖onMeasure以强制它的方形尺寸。
我也不知道重量是否适用于maxXXX。但更糟糕的是,你可以通过强制它不超过200来使它在onMeasure中全部工作。