【问题标题】:java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParamsjava.lang.ClassCastException: android.view.ViewGroup$LayoutParams 不能转换为 android.widget.RelativeLayout$LayoutParams
【发布时间】:2013-11-05 11:02:32
【问题描述】:

我刚刚编辑了我的 XML,我在我的 XML 中放入了幻灯片菜单代码,但是有一个错误。

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

    <ListView 
        android:id="@+id/menu_content_menulist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="8dp"

        android:cacheColorHint="@android:color/transparent" 
        android:divider="@null"
        android:listSelector="@null"/>      
    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <com.mozaik.tangsel.side_menu_scroll.ScrollerLinearLayout       
            android:id="@+id/menu_content_side_slide_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"        
            android:orientation="verti_

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/content_statis"        
        android:orientation="vertical"
        android:background="@drawable/bg_app"
         >

        <include layout="@layout/layout_action_bar" />
    <ScrollView
        android:id="@+id/SV"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:fillViewport="true" 
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="4dp"
                android:background="@drawable/inbox_interface"
                android:orientation="vertical" >

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >

                    <ImageView
                        android:id="@+id/ImageMozaikTangsel"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="10dip" />

                </LinearLayout>

                <LinearLayout
                    android:id="@+id/tabMozaikTangselLayout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >
                </LinearLayout>

            </LinearLayout>

        </LinearLayout>

</ScrollView>

   </LinearLayout>
</com.mozaik.tangsel.side_menu_scroll.ScrollerLinearLayout>
</RelativeLayout>
</RelativeLayout>

logcat 中的错误:

  10-26 15:53:32.126: E/AndroidRuntime(10869): FATAL EXCEPTION: main
10-26 15:53:32.126: E/AndroidRuntime(10869): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.RelativeLayout$DependencyGraph.findRoots(RelativeLayout.java:1352)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.RelativeLayout$DependencyGraph.getSortedViews(RelativeLayout.java:1299)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.RelativeLayout.sortChildren(RelativeLayout.java:316)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:337)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.View.measure(View.java:15193)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.View.measure(View.java:15193)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.View.measure(View.java:15193)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2217)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.View.measure(View.java:15193)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4216)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.Choreographer.doFrame(Choreographer.java:525)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.os.Handler.handleCallback(Handler.java:615)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.os.Looper.loop(Looper.java:137)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at android.app.ActivityThread.main(ActivityThread.java:4794)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at java.lang.reflect.Method.invokeNative(Native Method)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at java.lang.reflect.Method.invoke(Method.java:511)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
10-26 15:53:32.126: E/AndroidRuntime(10869):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 看起来您正在修改代码中的LayoutParams。单独的 XML 布局不会导致这种情况。因此,请在问题中包含相关代码。
  • 确保导入正确的 LayoutParams。
  • @kalyan pvs 的回答解决了我的错误,也谢谢你:)
  • @bukanamay 好,那你必须接受他的回答,伙计

标签: java android android-layout android-relativelayout layoutparams


【解决方案1】:

在您的代码中,您正在导入 import android.widget.RelativeLayout.LayoutParams; 而不是 android.view.ViewGroup.LayoutParams

所以删除import android.widget.RelativeLayout.LayoutParams;

并添加import android.view.ViewGroup.LayoutParams

【讨论】:

  • 为什么 ViewGroup.LayoutParams 会有所作为?
  • @IgorGanapolsky 因为 LayoutParams 是特定类的内部类..RelativeLayout 扩展 ViewGroup 所以你可以进行类型转换,但 RelativeLayout.LayoutParams 不能扩展 ViewGroup.LayoutParams 所以它会抛出 ClassCastException
【解决方案2】:

只需单击 Cnt+o 即可删除不需要的导入

【讨论】:

    【解决方案3】:

    您应该创建父布局的 LayoutParams 对象。下面的布局示例要设置 LinearLayout 的高度和宽度,您必须使 RelativeLayout 的 LayoutParmas 不是 LinearLayout 本身。

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

    Java:

    //IN ACTIVITY
    RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(30,30); //Parent Params
    linearLayout.setLayoutParmas(params); //Child Layout
    
    
    //If you want to set the params of the Relative Layout above. It seems it doesn't have any parent but it has a parent created by android framework which is a frame layout. So 
    FrameLayout.LayoutParmas params=new FrameLayout.LayoutParmas(30, 30);//FrameLayout is a parentcreated by anroid frame work
    relativeLayout.setLayoutParmas(params);  ////Here Relative layout is child
    

    【讨论】:

    • 这是一个很好的答案。
    【解决方案4】:

    使用下面的代码:

    imageView.setLayoutParams(
      new android.widget.RelativeLayout.LayoutParams(
        ViewPager.LayoutParams.MATCH_PARENT,
        ViewPager.LayoutParams.MATCH_PARENT));
    

    如果您遇到任何错误,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多