Relative Layout: Different behavior on Api < 11

kin*_*mer 5 api android position relativelayout android-layout

I don't know why, but layout is shown well on device with Api 11+, isn't for older.

This is 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>
Run Code Online (Sandbox Code Playgroud)

This is result on API 11+:

Api11 +

This on API 10-:

API 10-

I tried to fix it playing with layouts and I can obtain a quite good result, but never like the first one.

Can someone help me?

EDIT:

Photo on devices:

在此输入图像描述

EDIT2

Triangle warning are:

  • String "9" should use string resource
  • ImageView1 and 3: missing content description attribute
  • RelativeLayout or it's parent possibly useless
  • Nested weights are bad for performance

顺便说一下,我认为没有解决这个问题

kin*_*mer 2

好的。我修好了它。在调整布局并遵循 NikkyD 关于“父级中心”功能的建议后,我遵循了以下策略:

无法使用缩放和平移属性,因为较旧的 API(可能)无法识别它们。因此,我删除了平移和缩放选项,并通过为 IV3 设置固定的高度和宽度(30dpx30dp)来缩放图像。现在尺寸是正确的,但是如果我对 IV3 和 TextView 调用“alignparent Top”和“alignparent Right”,它们的位置很好,但 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>
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助:)

编辑

注意父级的宽度尺寸。如果将权重的父项设置为 1,那么自然大小会根据显示大小动态变化。图像始终位于父级中心,IV3 和 TextView 的相对布局始终位于 top|right。因此,如果父宽度尺寸增大,图像居中和新的相对布局之间的距离也会增大,并且可能发生如下情况:

在此输入图像描述