1

我有一個父母LinearLayoutImageView和一個孩子LinearLayout裏面。 LinearLayout孩子的文字裏面可以有不同的長度。我希望ImageView的尺寸始終相同(200dpx200dp),並且只能按比例縮小它如果子LinearLayout的文本溢出。同時使用maxHeight和體重

爲此,我在ImageView子代中使用了layout_weightmaxHeight,但由於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的與下方一些文字,獨立於文本的長度的。

enter image description here 編輯

我曾試圖修改自定義的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

沒有承諾圖像將被平方,因爲它的最大寬度和高度是平方的。所有這一切意味着如果它在兩個方向上都達到最大尺寸,它將是方形的。如果你想確保它的平方,子類ImageView並覆蓋onMeasure,強制它的方形尺寸。

我也不知道重量是否適用於maxXXX。但最糟糕的情況是,你可以通過強制它不超過200來使它在onMeasure中工作。

+0

我試圖重寫onMeasure方法,並且ImageView顯示爲平方,但如果我這樣做,它不會如果LinearLayout的文本溢出,則重新調整大小。我用這個答案http://stackoverflow.com/questions/16506275/imageview-be-a-square-with-dynamic-width – Spirrow

+0

你需要onMeasure的工作,以確保廣場。但你想做的有點不同。將寬度和高度都設置爲Math.min(widthMeasureSpec,Math.min(heightMeasureSpec,200dp))。基本上允許的寬度,高度或200dp以最小者爲準。 –

+0

我會告訴你,如果我儘快工作 – Spirrow