嵌套布局的问题

时间:2011-06-18 21:37:20

标签: android android-linearlayout relativelayout nested

我的xml中有以下情况:

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


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:gravity="center"
    android:background="@drawable/topbar"
    >
    <TableRow >
        <TextView android:minWidth="280sp" 
            android:id="@+id/header" 
            android:layout_height="wrap_content" 
            android:layout_width="wrap_content" 
            android:layout_gravity="center_vertical"
            android:textColor="@color/path_color"
            android:paddingLeft="10px"/>
    </TableRow>

</TableLayout>
<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

    <org.solid.explorer.HorizontalPager
            android:id="@+id/horizontal_pager"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            >
    </org.solid.explorer.HorizontalPager>

    <RelativeLayout
        android:id="@+id/contextMenu"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone"
        >
            <org.solid.explorer.ContextOption
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" 
                />
            <org.solid.explorer.ContextOption
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" 
                />
            <org.solid.explorer.ContextOption
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" 
                />
            <org.solid.explorer.ContextOption
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" 
                />
            <org.solid.explorer.ContextOption
                android:layout_height="wrap_content"
                android:layout_width="wrap_content" 
                />

    </RelativeLayout>
    <LinearLayout
        android:id="@+id/drag_view"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone">
        <ImageView
            android:id="@+id/drag_icon"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
        <TextView
            android:id="@+id/drag_label"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content" />
    </LinearLayout>
<!--        <ImageView
        android:id="@+id/drag_icon1"
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"
        android:visibility="gone"
    /> -->
</RelativeLayout>
</LinearLayout>

问题在于带有id drag_view的LinearLayout。

在程序代码中,我使用带有id drag_icon1的ImageView(它被手指拖动)。一切都很好。但是我想在这个图标中添加文字,所以我需要拖动ImageView而不是ImageL和TextView里面的LinearLayout,我是对的吗?

但是当我切换到LinearLayout并注释旧的ImageView(如在呈现的xml中)时,程序在setContentView方法(onCreate()的第二行失败,因此进一步的代码与此问题没有共同点)。 WTF?如果drag_icon1被取消注释并用作拖动图像,那么一切都很好,setContentView工作(即使存在drag_view)。

这是堆栈跟踪:

E/AndroidRuntime(13517): FATAL EXCEPTION: main
E/AndroidRuntime(13517): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.solid.explorer/org.solid.explorer.Explorer}:java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
E/AndroidRuntime(13517):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816)
E/AndroidRuntime(13517):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
E/AndroidRuntime(13517):        at android.app.ActivityThread.access$1500(ActivityThread.java:132)
E/AndroidRuntime(13517):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033)
E/AndroidRuntime(13517):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(13517):        at android.os.Looper.loop(Looper.java:143)
E/AndroidRuntime(13517):        at android.app.ActivityThread.main(ActivityThread.java:4196)
E/AndroidRuntime(13517):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(13517):        at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(13517):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(13517):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(13517):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(13517): Caused by: java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
E/AndroidRuntime(13517):        at org.solid.explorer.Explorer.onCreate(Explorer.java:126)
E/AndroidRuntime(13517):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
E/AndroidRuntime(13517):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780)
E/AndroidRuntime(13517):        ... 11 more

它表明LayoutParams有问题,但是使用drag_icon1它没有问题。我不知道有什么问题..谢谢你的任何建议

1 个答案:

答案 0 :(得分:0)

假设您发布的布局XML是完整文件,我看到的问题是:

  • 您需要拥有一个根元素。
  • 您关闭了我看不到的文档底部的LinearLayout

但是,如果这是真的,我不确定如何通过取消注释ImageView来使其工作。