Android: ImageView src игнорирует свойство layout_weight родительского элемента - PullRequest
0 голосов
/ 24 июня 2019

У меня есть две строки вертикальной таблицы со свойством layout_weight = "1", поэтому они занимают одинаковое пространство по вертикали, но если я добавлю тег «ImageView» в теги этих таблиц со свойством android:src, он изменит размер родительского тега tableRow в соответствии с реальный размер, поэтому есть ли способ сохранить эти равные высоты TableRow без указания точного размера ImageView или TableRow Код

рабочий код (упрощенная версия)

<?xml version="1.0" encoding="utf-8"?>    
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">

<TableRow
    android:layout_width="match_parent"
    android:layout_weight="1">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@android:color/white" />
</TableRow>

<TableRow
    android:layout_width="match_parent"
    android:layout_weight="1">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@android:color/black" />
</TableRow>
</TableLayout>

Но как только я добавлю android:src к свойству ImageViews и выберу изображение, размер родительского элемента <TableRow> изменится в соответствии с размером этого изображения, есть ли способ, которым изображение просто вписывается в текущий размер родительского `и не меняет его родительский размер?

на основе ответа Манишика Я попробовал этот код, но он тоже не работал

<TableLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
android:measureWithLargestChild="true"
xmlns:android="http://schemas.android.com/apk/res/android">

<TableRow
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:background="@android:color/holo_green_light"
    android:gravity="center"
    android:layout_weight=".5">

    <ImageView
        android:layout_width="match_parent"
        android:src="@drawable/ic_launcher_background"
        android:background="@android:color/white"/>
</TableRow>

<TableRow
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight=".5"
    android:gravity="center"
    android:background="@android:color/holo_blue_bright">

    <ImageView
        android:layout_width="match_parent"
        tools:srcCompat="@tools:sample/backgrounds/scenic"
        android:background="@android:color/black"/>
  </TableRow>
</TableLayout>

Спасибо!

Ответы [ 5 ]

0 голосов
/ 25 июня 2019

Если вы все еще ищете ответ, рассмотрите возможность внесения следующих изменений:

  1. Добавьте android:measureWithLargestChild="true" к вашему TableLayout, это обеспечит высоту строки наибольшеговысота TableRow среди всех.

  2. Вместо добавления гравитации к TableLayout добавьте его в TableRows, поскольку layout_gravity контролирует, как представление размещает свое содержимое внутри своего собственного контейнера, и я считаю,Вы хотите, чтобы изображения были в центре.

  3. Добавьте weightSum к TableLayout и разделите веса в каждом TableRow.

Попробуйте приведенный ниже макет XML, который я использовал и работает:

<TableLayout android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:weightSum="1"
             android:measureWithLargestChild="true">

    <TableRow
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="@android:color/holo_green_light"
            android:gravity="center"
            android:layout_weight=".5">

        <ImageView
                android:layout_width="match_parent"
                android:src="@drawable/ic_launcher_background"
                android:background="@android:color/white"/>
    </TableRow>

    <TableRow
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight=".5"
            android:gravity="center"
            android:background="@android:color/holo_blue_bright">

        <ImageView
                android:layout_width="match_parent"
                android:src="@drawable/ic_dashboard_black_24dp"
                android:background="@android:color/black"/>
    </TableRow>
</TableLayout>
0 голосов
/ 24 июня 2019

Вы должны поместить android:weightSum="2" в TableLayout, и вам также нужно установить layout_width="0dp" в обоих TableRow. Я не думаю, что вам нужно android:layout_weight="1" на вашем ImageView tho

0 голосов
/ 24 июня 2019

Попробуй это. Таким образом, обе строки разделят высоту макета таблицы. Высота я указал как 400dp только для того, чтобы проверить, делится ли поровну между строками. Вы можете оставить его соответствующим родительскому или любому другому в зависимости от ваших требований.

    <TableLayout android:layout_width="match_parent"
        android:layout_height="400dp">
        <TableRow android:layout_weight="1">
            <ImageView
                android:background="@color/white"
                android:src="@drawable/image"
                android:layout_height="match_parent"/>
        </TableRow>
        <TableRow android:layout_weight="1">
            <ImageView
                android:background="@color/black"
                android:src="@drawable/image"
                android:layout_height="match_parent"/>
        </TableRow>
    </TableLayout>
0 голосов
/ 24 июня 2019

Проверьте тип шкалы.Кроме того, если вы не хотите, чтобы ваши изображения пересекали остальную часть макета, вы всегда можете указать конкретную высоту или ширину

android:scaleType="centerCrop"
0 голосов
/ 24 июня 2019

Убедитесь, что у parent_layout есть атрибут android:weightSum="2"

андроид: weightSum

Определяет максимальную сумму веса. Если не указано, сумма вычисляется путем добавления layout_weight для всех дочерних элементов. Это может например, чтобы дать одному ребенку 50% от общего количества пространство, давая ему layout_weight 0,5 и устанавливая weightSum в 1,0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...