这个简单的RelativeLayout Android程序有什么问题?

时间:2012-06-25 21:27:02

标签: java android button relativelayout android-xml

我已经创建了这个非常简单的RelativeLayout作为对我稍后可能要做的事情的测试。目前,应该有3个按钮,secondalphamode相对于彼此排列。

我有两个问题:首先,XML布局文件有问题,我不知道是什么,因为我已经彻底检查了它。这导致布局的第10行和第11行出错。其次,没有生成R文件,因为通常在Android活动中。这导致主代码的第11行出错,因为它试图从R文件中调用某些内容。

我的代码如下:

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/second"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/alpha"
        android:layout_toLeftOf="@id/mode"
        android:text="@string/second"
        android:layout_alignParentLeft="true" />
    <Button
        android:id="@+id/alpha"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/second"
        android:layout_alignParentLeft="true"
        android:text="@string/alpha" />
    <Button
        android:id="@+id/mode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/second"
        android:layout_alignParentLeft="true"
        android:text="@string/mode" />
</RelativeLayout>

Activity代码:

package com.example.TI84;

import android.app.Activity;
import android.os.Bundle;

public class TI84GraphingCalculatorActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

RelativeLayouts,顾名思义,以相对方式组织元素。因此,您无法引用文件中较低的窗口小部件。这种布局将起作用:

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

    <Button
        android:id="@+id/mode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="@string/alpha" />

    <Button
        android:id="@+id/second"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/mode"
        android:text="@string/second" />

    <Button
        android:id="@+id/alpha"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/mode"
        android:layout_below="@id/mode"
        android:text="@string/alpha" />

</RelativeLayout>

您没有获得R.java,因为当您的XML文件中存在错误时,不会生成它。

此外,虽然您没有要求这样做,但您的原始XML文件具有循环依赖性。这意味着两个小部件以这样的方式相互引用它们创建一个无限循环,就像A在B的左边,B在A的右边

答案 1 :(得分:2)

当您的xml文件包含错误时,将不会生成R类。你的错误是这样的:

android:layout_above="@id/alpha"

放:

android:layout_above="@+id/alpha"

答案 2 :(得分:1)

在第10行尝试此操作

android:layout_above="@+id/alpha"

这在11

android:layout_toLeftOf="@+id/mode"

答案 3 :(得分:1)

您遇到错误的原因是您正在引用尚未由文件中的该点定义的ID。您只能相对于文件中元素上方定义的ID进行布局。

没有R.java文件,因为XML文件中的错误导致构建失败,并且在构建期间生成了文件。