自定义LinearLayout二进制XML文件行#1:错误类膨胀

时间:2015-04-22 06:37:35

标签: android xml android-layout xamarin xamarin.android

我自定义LinearLayout,发生了xml错误
这个代码是xamarin(C#)代码,但xml代码就像一个Java。
写下代码。

Android.Views.InflateException: Binary XML file line #1: Error inflating class com.eappandroid.phone1.OpendCheckLinearLayout


首先,Unhandled Exception行是(在LeftDrawerMenuItemAdapter类中)(在GetView中)

convertView = ((Activity)Context).LayoutInflater.Inflate(Resource.Layout.LeftDrawerMenu_List_Item, null);

LeftDrawerMenu_List_Item xml

<?xml version="1.0" encoding="utf-8"?>
<com.eappandroid.phone1.OpendCheckLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="52dp"
    android:background="@drawable/menu_item_background_color_pressed"
    android:minHeight="25px"
    android:minWidth="25px"
    android:id="@+id/left_drawer_list_item_layout"
    android:orientation="horizontal">
  <ImageView
      android:id="@+id/left_drawer_list_icon"
      android:layout_width="36dp"
      android:layout_height="36dp"
      android:layout_gravity="center"
      android:layout_marginLeft="12dp"
      android:gravity="center" />
  <TextView
      android:id="@+id/left_drawer_list_item_text"
      android:layout_width="wrap_content"
      android:layout_height="52dp"
      android:gravity="left|center"
      android:layout_gravity="center"
      android:layout_marginLeft="8dp"
      android:layout_weight="1"
      android:text="item"
      android:textColor="@drawable/menu_item_title_color_pressed"
      android:textSize="16sp"
      android:textStyle="bold" />
  <ImageView
      android:id="@+id/left_drawer_noti_alert"
      android:layout_width="22dp"
      android:layout_height="22dp"
      android:layout_gravity="center"
      android:layout_marginRight="18dp"
      android:background="@drawable/menu_icon_noti_new_alert"
      android:gravity="center" />
</com.eappandroid.phone1.OpendCheckLinearLayout>


OpendCheckLinearLayout类

namespace EAppAndroid.Protype.LeftDrawerMenu2
{


    public class OpendCheckLinearLayout : LinearLayout
    {
        private static readonly int[] STATE_MENU_OPEND = { Resource.Attribute.state_menu_opend };
        public bool menuOpen = false;



        public OpendCheckLinearLayout(Context context)
            : base(context, null)
        {

        }

        public OpendCheckLinearLayout(Context context, Android.Util.IAttributeSet attributeSet)
            : base(context, attributeSet)
        {

        }

        public OpendCheckLinearLayout(Context context, Android.Util.IAttributeSet attributeSet, int defStyle)
            : base(context, attributeSet, defStyle)
        {

        }



        protected override int[] OnCreateDrawableState(int extraSpace)
        {
            if (menuOpen)
            {
                int[] drawableStates = base.OnCreateDrawableState(extraSpace + 1);
                MergeDrawableStates(drawableStates, STATE_MENU_OPEND);

                return drawableStates;
            }
            else
            {
                return base.OnCreateDrawableState(extraSpace);
            }

        }

        public void setMenuOpen(bool menuOpen)
        {

            if (this.menuOpen != menuOpen)
            {
                this.menuOpen = menuOpen;

            }
        }
    }

}

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

实际上,膨胀异常实际上并不是问题所在,但它实际上来自于布局中的另一个更深层次的问题,然后将其包含在InflateException中。一个常见的问题是在尝试通过加载ImageView加载可绘制资源时出现内存不足异常。如果其中一个资源具有较高的像素分辨率,则需要大量内存才会导致膨胀异常。

基本上,验证drawables图像中的像素分辨率是布局所需的最小值。它帮了我很多次。

我希望它对你也有用。

答案 1 :(得分:0)

您的命名空间似乎错了。

您将com.eappandroid.phone1.OpendCheckLinearLayout放入xml,但在您的OpendCheckLinearLayout类中,您有EAppAndroid.Protype.LeftDrawerMenu2,因此您应该放置com.eappandroid.Protype.LeftDrawerMenu2.OpendCheckLinearLayout

编辑:

似乎xml中只需要命名空间,因此您应该放置eappandroid.Protype.LeftDrawerMenu2.OpendCheckLinearLayout