Относительная компоновка: различное поведение на Api <11


Я не знаю, почему, но макет хорошо показан на устройстве с Api 11+, не для старых.

Это xml:

    <LinearLayout
        android:id="@+id/workers_linearlayout"
        android:layout_width="50dp"
        android:layout_height="70dp"
        android:layout_weight="1" >

        <RelativeLayout
            android:id="@+id/workers_relative_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center" >

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:src="@drawable/workers_small" />

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                android:scaleX="0.5"
                android:scaleY="0.5"
                android:src="@drawable/ic_cerchio_rosso"
                android:translationX="25dp"
                android:translationY="-20dp" />

            <TextView
                android:id="@+id/workers_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="9"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:translationX="25dp"
                android:translationY="-20dp" />
        </RelativeLayout>
    </LinearLayout>

Это результат на API 11+:

Api11+

Это на API 10 -:

API 10-

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

Кто-нибудь может мне помочь?

Редактировать:

Цены на устройства:

Введите описание изображения здесь

EDIT2

Треугольник предупреждения являются:

  • строка " 9 " должна использовать строковый ресурс
  • ImageView1 и 3: отсутствует атрибут описания содержимого
  • RelativeLayout или это родитель, возможно, бесполезный
  • вложенные веса плохо влияют на производительность

Кстати, ничего из этих фиксированных решений моей проблемы я не думаю

2 5

2 ответа:

Хорошо. Я все исправил. Играя с макетом и следуя предложению NikkyD о функции "центр в родителе", я следовал этой политике:

Невозможно использовать свойства масштабирования и трансляции, потому что более старые API (возможно) не распознают их. Итак, я удалил параметры перевода и масштабирования и масштабировал изображение, установив фиксированную высоту и ширину для IV3 (30dpx30dp). Теперь размерность правильная, но если я вызову "align parent Top" с "align parent Right" для IV3 и TextView, их положение это хорошо, но TextView не расположен в центре IV3. Именно так:

Неправильное положение номера

Для исправления этого я добавил новый относительный макет внутри " workersRelativeLayout "и поместил в него IV3 и TextView и установил для каждого из них" центр в родителе " в TRUE. Затем я установил для новой относительной компоновки "выровнять Родительский верх"и" выровнять Родительский правый". Это и есть конечный результат:

Правильная позиция количество

Это новый формат xml:

            <LinearLayout
                android:id="@+id/workers_linearlayout"
                android:layout_width="50dp"
                android:layout_height="70dp"
                android:layout_weight="1" >

                <RelativeLayout
                    android:id="@+id/workers_relative_layout"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center" >

                    <ImageView
                        android:id="@+id/imageView1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerInParent="true"
                        android:src="@drawable/workers_small" />

                    <RelativeLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_alignParentTop="true" >

                        <ImageView
                            android:id="@+id/imageView3"
                            android:layout_width="30dp"
                            android:layout_height="30dp"
                            android:layout_centerInParent="true"
                            android:src="@drawable/ic_cerchio_rosso" />


                        <TextView
                            android:id="@+id/workers_number"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_centerInParent="true"
                            android:text="9"
                            android:textAppearance="?android:attr/textAppearanceMedium" />

                    </RelativeLayout>
                </RelativeLayout>
            </LinearLayout>

Надеюсь, это кому-то поможет :)

EDIT

Обратите внимание на размер родительской ширины. Если вы установите Родительский вес равным 1, Естественно, размер будет динамическим в соответствии с размером дисплея. Изображение всегда располагается в центре родительской и относительной компоновки IV3 и TextView всегда будет сверху / справа. Таким образом, если родительский размер ширины растет, расстояние между центрированным изображением и новым относительным расположением тоже растет, и может произойти что-то вроде этого:

Введите описание изображения здесь

Первое линейное описание имеет вес. Если у него есть вес, то ему нужно иметь одно измерение, установленное в 0dp, это будет измерение, в котором он масштабируется по своему весу.

Все 3 элемента относительной компоновки имеют значение "centeredinparent" true. Родитель-это Relayout.

IV3 имеет высоту match_parent, поэтому он будет растянут до высоты rel-макета. Я почти уверен, что это переопределяет ваши параметры шкалы 0.5.

Я не уверен, но я думаю, что rel-layout centeredinparent также переопределяет перевод.

Макеты очень уродливы с опциями. Некоторые считаются превосходящими других,и они не действуют. Я поиграл немного времени с относительными макетами и обнаружил, что в моем случае я могу расположить их только "внизу", но никогда" сверху", потому что по какой-то причине вышеуказанное расположение не будет работать (даже в предварительном просмотре eclipse!!) но в xml не было абсолютно ничего плохого.

Так что я догадываюсь некоторые из ваших опций отменяют другие, и это касается более современных API, поскольку они могут быть еще более ограничительными (или более сломанными, его все еще android ;))