我有一個父母LinearLayout
與ImageView
和一個孩子LinearLayout
裏面。 LinearLayout
孩子的文字裏面可以有不同的長度。我希望ImageView
的尺寸始終相同(200dpx200dp),並且只能按比例縮小它如果子LinearLayout的文本溢出。同時使用maxHeight和體重
爲此,我在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);
}
我試圖重寫onMeasure方法,並且ImageView顯示爲平方,但如果我這樣做,它不會如果LinearLayout的文本溢出,則重新調整大小。我用這個答案http://stackoverflow.com/questions/16506275/imageview-be-a-square-with-dynamic-width – Spirrow
你需要onMeasure的工作,以確保廣場。但你想做的有點不同。將寬度和高度都設置爲Math.min(widthMeasureSpec,Math.min(heightMeasureSpec,200dp))。基本上允許的寬度,高度或200dp以最小者爲準。 –
我會告訴你,如果我儘快工作 – Spirrow