1

У меня есть родитель LinearLayout с и ребенок LinearLayout внутри. У ребенка LinearLayout есть текст внутри него, который может иметь разную длину. Я хотел бы, чтобы ImageView всегда имел одинаковый размер (200dpx200dp) и уменьшался пропорционально, если текст дочернего LinearLayout переполнен.Использовать maxHeight и массу в то же время

Для этого я использовал layout_weight и maxHeight у ребенка ImageView, но из-за макета макс 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 EDIT

Я попытался изменить onMeasure() заказного ImageView, но это не изменение размера должным образом, и это занимает часть пространства ребенка 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 вообще. Но в худшем случае вы можете заставить все это работать в onMeasure, заставляя его работать не более 200.

+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

Смежные вопросы