Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class lzl.edu.c
2015-12-02 09:48
507 查看
在自定义view中常常会出现这么一个错误
Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class lzl.edu.com.scrolldemos.view.MyImageView at android.view.LayoutInflater.createView(LayoutInflater.java:616) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:257) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) at lzl.edu.com.scrolldemos.MainActivity.onCreate(MainActivity.java:11) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)? at android.app.ActivityThread.access$800(ActivityThread.java:151)? at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)? at android.os.Handler.dispatchMessage(Handler.java:102)? at android.os.Looper.loop(Looper.java:135)? at android.app.ActivityThread.main(ActivityThread.java:5254)? at java.lang.reflect.Method.invoke(Native Method)? at java.lang.reflect.Method.invoke(Method.java:372)? at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)? at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)? Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] at java.lang.Class.getConstructor(Class.java:531) at java.lang.Class.getConstructor(Class.java:495) at android.view.LayoutInflater.createView(LayoutInflater.java:580) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)? at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)? at android.view.LayoutInflater.inflate(LayoutInflater.java:504)? at android.view.LayoutInflater.inflate(LayoutInflater.java:414)? at android.view.LayoutInflater.inflate(LayoutInflater.java:365)? at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:257)? at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)? at lzl.edu.com.scrolldemos.MainActivity.onCreate(MainActivity.java:11)? at android.app.Activity.performCreate(Activity.java:5990)? at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)? at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)? at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)? at android.app.ActivityThread.access$800(ActivityThread.java:151)? at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)? at android.os.Handler.dispatchMessage(Handler.java:102)? at android.os.Looper.loop(Looper.java:135)? at android.app.ActivityThread.main(ActivityThread.java:5254)? at java.lang.reflect.Method.invoke(Native Method)? at java.lang.reflect.Method.invoke(Method.java:372)? at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)? at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)?这个错误是因为在自定义view中设置了
android:layout_width="wrap_content" android:layout_height="wrap_content"使用自定义view时,不能够设置为“wrap_content”应该设置为固定的宽度和高度。
解决方案:
1、修改布局文件
android:layout_width="match_parent" android:layout_height="match_parent"
2、重写OnMeasure()方法,为"wrap_Content"指定一个最小的值
//重写OnMeasure方法实现wrap_content的适配 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //必须调用这个方法,来改变view的显示大小 setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); } /** * UNSPECIFIED * 不指定view的显示大小,常用于自定义view中。 EXACTLY 精确模式,就是我们常常定义的match_parent,或者layout_width="100dp"。告诉view是一个精确的显示。 AT_MOST 我们定义的wrap_content,没有具体的大小。 */ private int measureWidth(int measureSpc){ int result ; //通过measureSpe来获取view的显示模式(这里有三种显示模式) int specMode = MeasureSpec.getMode(measureSpc); int specSize = MeasureSpec.getSize(measureSpc); Log.i("获取模式","模式:"+specMode+" 尺寸:"+specSize); if(specMode == MeasureSpec.EXACTLY){ result = specSize; }else{ result = 200; if(result == MeasureSpec.AT_MOST){ result = Math.min(result,specSize); } } return result; } private int measureHeight(int measureSpc){ int result ; //通过measureSpe来获取view的显示模式(这里有三种显示模式) int specMode = MeasureSpec.getMode(measureSpc); int specSize = MeasureSpec.getSize(measureSpc); Log.i("获取模式","模式:"+specMode+" 尺寸:"+specSize); if(specMode == MeasureSpec.EXACTLY){ result = specSize; }else{ result = 200; if(result == MeasureSpec.AT_MOST){ result = Math.min(result,specSize); } } return result; }通过重写OnMeasure方法就可以实现layout_content="wrap_content"了。
相关文章推荐
- 自定义ViewGroup (1)支持margin,gravity以及水平,垂直排列
- android自定义View的用法
- android自定义控件实例
- 自定义view的自定义属性的引用
- android在自定义View的xml中设置自定义的成员属性
- 自定义android进度条
- android基础之自定义view
- 自定义View(一)
- Android自定义组件:一个波浪形的组件
- ipad开发中UIPopoverController中自定义view在Xcode6中尺寸匹配问题
- android自定义view的实现
- NullPointerException - RelativeLayout.onMeasure
- Android如何自定义视图之测量和布局原理(一)
- 自定义View步骤
- 自定义ViewGroup实现水平布局空间不足自动换行的效果
- 关于onMeasure ()和onLayout()的一些个人理解
- 自定义View的回调函数
- Android中的UI界面控制方式和自定义View
- Android之自定义View的封装
- Android自定义View画曲线