Установите максимальную ширину ImageView в процентах от ширины его родителя.

Я загружаю навигацию с веб-сайта, где у каждого элемента есть заголовок, описание и изображение. Я хочу, чтобы все заголовки и описания располагались по одной оси.

Я использую следующий макет для каждого элемента в ListView. Он отлично работает, когда изображения вполовину меньше по ширине, чем по высоте, но не в том случае, если они шире — текст помещается под изображением.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:orientation="horizontal">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1">
            <TextView
                android:layout_height="wrap_content"
                android:textSize="10pt"
                android:id="@+id/title"
                android:gravity="center_horizontal"
                android:layout_width="fill_parent" />
            <TextView
                android:layout_height="wrap_content"
                android:id="@+id/description"
                android:layout_width="fill_parent"
                android:gravity="center_horizontal" />
        </LinearLayout>
        <View
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"
            android:layout_weight="3" />
    </LinearLayout>
    <ImageView
        android:id="@+id/icon"
        android:adjustViewBounds="true"
        android:layout_width="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_height="wrap_content" />
</RelativeLayout>

Можно ли заставить изображение оставаться на 25% ширины RelativeLayout или меньше?


person Ben L.    schedule 11.06.2010    source источник


Ответы (1)


Это невозможно сделать в XML. Вы должны указать размер в коде. Я бы сделал это в onCreate() активности:

import android.widget.LinearLayout.LayoutParams;
...
obj.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                                     LayoutParams.WRAP_CONTENT,
                                     0.25f));

Это означает, что используйте 100 % высоты родителя, но 25 % ширины родителя.

person Emmanuel    schedule 04.11.2010
comment
Я считаю, что это должно быть LinearLayout.LayoutParams, а 0,25 должно быть 0,25f для работы. - person thomas88wp; 27.12.2012
comment
@ thomas88wp Очевидно, что этот код требует импорта LinearLayout.LayoutParams. Кроме того, 0,25 и 0,25f — это одно и то же в Java из-за десятичной точки. - person Emmanuel; 09.01.2013
comment
извините, что утомляю, но в java '0.25' - это двойной литерал, а '0.25f' - литерал с плавающей запятой. Если для параметра требуется число с плавающей запятой (как в данном случае), он не скомпилируется, если вы передадите ему двойное значение (хотя работает и наоборот, поскольку число с плавающей запятой может быть неявно приведено к двойному, но не наоборот). Чтобы продемонстрировать, попробуйте скомпилировать public void foo(float bar) { foo(0.5); } — это не сработает, пока вы не добавите 'f'. - person thomas88wp; 20.01.2013
comment
Но это все равно устанавливает ширину. Не МАКСИМАЛЬНАЯ ширина =( - person cherry-wave; 21.10.2016