布局文件中元素声明的重要顺序是什么?

时间:2013-04-30 19:11:42

标签: android android-layout

我有:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activityLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ColorViewerActivity" >

    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        // skip it
    </TabHost>

    <TextView
        android:id="@+id/decDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@android:id/tabhost"
        android:layout_centerHorizontal="true"
        android:gravity="center_vertical|center_horizontal"
        android:text="222"
        android:textSize="19sp" />

    <LinearLayout
        android:id="@+id/panelLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_margin="1dip"
        android:orientation="vertical" >

    </LinearLayout>

    <TextView
        android:id="@+id/hexDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/decDescription"
        android:layout_alignRight="@+id/panelLayout"
        android:layout_below="@android:id/tabhost"
        android:text="111"
        android:textSize="14sp" />

</RelativeLayout>

如果我将最后TextView (id=hexDescription)置于penult LinearLayout (id=panelLayout)之前,我会得到例外。来自LogCat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{   com.gmail.leonidandand.colorviewer/com.gmail.leonidandand.colorviewer.ColorViewerActivity}:
java.lang.ClassCastException: android.widget.LinearLayout

可能是什么问题?

抱歉我的英文。

由于

3 个答案:

答案 0 :(得分:1)

这样做是因为您指示它应该相对于LinearLayout定位。因此,您需要在要将其定位到的元素之后声明它。如果你没有宣布

android:layout_alignRight="@+id/panelLayout"
你的十六进制TextView中的

然后无所谓。这是因为当它绘制layout时,它会看到该属性并且找不到相对于它的id,因为它尚未绘制view

答案 1 :(得分:1)

尝试重新安排下面的内容

android:layout_alignBottom="@+id/decDescription"
android:layout_alignRight="@+id/panelLayout"
android:layout_below="@android:id/tabhost"

可能会发生错误,因为您将它对齐在decDescription的底部和tabhost下面

答案 2 :(得分:1)

Tabhost要求带有ID的TabWidget。当我使用你的xml布局时,这就是lint警告的。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activityLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ColorViewerActivity" >
<TabHost 
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>
</TabHost>

<TextView
    android:id="@+id/decDescription"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@android:id/tabhost"
    android:layout_centerHorizontal="true"
    android:gravity="center_vertical|center_horizontal"
    android:text="222"
    android:textSize="19sp" />

<LinearLayout
    android:id="@+id/panelLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_margin="1dip"
    android:orientation="vertical" >

</LinearLayout>

<TextView
    android:id="@+id/hexDescription"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/decDescription"
    android:layout_alignRight="@+id/panelLayout"
    android:layout_below="@android:id/tabhost"
    android:text="111"
    android:textSize="14sp" />

   </RelativeLayout>

TabHost有一个tabWidget和一个FrameLayout。

从图形布局中捕获的快照

enter image description here

http://www.androidhive.info/2011/08/android-tab-layout-tutorial/

的工作示例