1

我在使用(我认为)简单的 LinearLayout 时遇到了问题。(长问题 - 抱歉)我有一个带有 RelativeLayout 的 XML 布局,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:id="@+id/display_Player_Init"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="Player" />

    <TextView
        android:id="@+id/display_USGA_Index"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:gravity="right"
        android:layout_toRightOf="@+id/display_Tees"
        android:text="IDX" />

    <TextView
        android:id="@+id/display_Course_HCP"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:gravity="right"
        android:layout_toRightOf="@+id/display_USGA_Index"
        android:text="HCP" />

    <TextView
        android:id="@+id/display_Course"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:layout_toRightOf="@+id/display_Player_Init"
        android:text="Course" />

    <TextView
        android:id="@+id/display_Tees"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:layout_toRightOf="@+id/display_Course"
        android:text="Tees" />

</RelativeLayout>

这在 IDE 预览中正确显示如下:

废话,没有足够的代表点来发布图像。

并且应用程序正确显示了这一点(注意 5 个值的顺序):

没有足够的代表点来发布图像。

RelativeLayout 似乎过于庞大,我只想使用更简单的 LinearLayout,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    >

    <TextView
        android:id="@+id/display_Player_Init"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:text="Player" />

    <TextView
        android:id="@+id/display_USGA_Index"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:gravity="right"
        android:text="IDX" />

    <TextView
        android:id="@+id/display_Course_HCP"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:gravity="right"
        android:text="HCP" />

    <TextView
        android:id="@+id/display_Course"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Course" />

    <TextView
        android:id="@+id/display_Tees"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Tees" />

</LinearLayout>

在 IDE 中正确预览如下(请注意,第一个布局中的字段顺序不正确。我即将更正):

没有足够的代表点来发布图像。

并在应用程序中正确呈现如下:

没有足够的代表点来发布图像。

现在,当我更改 LinearLayout XML 中 TextViews 的顺序时,它呈现的好像字段中显示了错误的值。这是 XML:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    >

    <TextView
        android:id="@+id/display_Player_Init"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:text="Player" />

    <TextView
        android:id="@+id/display_Course"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Course" />

    <TextView
        android:id="@+id/display_Tees"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:text="Tees" />

    <TextView
        android:id="@+id/display_USGA_Index"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:gravity="right"
        android:text="IDX" />

    <TextView
        android:id="@+id/display_Course_HCP"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:gravity="right"
        android:text="HCP" />

</LinearLayout>

这是(正确的)IDE 预览: 没有足够的代表点来发布图像。

但是,这是应用程序渲染:

没有足够的代表点来发布图像。 它将字符串“ABC CC”放在右列中,并将其包装起来,就好像将字符串放在 HCP 字段中一样。

请注意,字段顺序是正确的,但值会以某种方式切换。XML 字段以正确的顺序呈现,但字段的值是:Name、Index、Tees、HCP、Course,其中“course”的值被包装到 HCP 字段的宽度。

这些示例之间没有更改任何代码,因此似乎是 xml 导致了问题。谁能帮我理解为什么?(抱歉没有图片。)

谢谢。

4

1 回答 1

1

当您使用 将资源 id 分配给 UI 元素(例如 TextView android:id=)时,会在 R.java 文件中创建一个 int 数据字段。

R.java 文件可以在项目的 /gen 目录中找到,并且与该目录中的所有文件一样,它是在构建时自动生成的。

有时,如果您重新处理资源文件(例如布局 XML 文件),以前分配给一个资源(例如 TextView)的 int 值可能会引用不同的资源,即另一个 TextView。这意味着当您使用类似的东西时findViewById(...),即使 R.id 指的是您想要的 UI 元素,实际的 int 资源 id 指向的却是不同的东西。

解决此类问题的最简单方法是清理项目 - 这将删除所有自动生成的文件并重新创建它们并重新构建项目。

于 2013-11-09T19:08:37.443 回答