安卓自定义组合控件 android.view.InflateException: Binary XML file #23:error inflate

本文记录了作者在Android应用开发过程中遇到的InflateException错误,并详细描述了错误的原因及解决过程,包括检查attr.xml中的属性名一致性及处理空指针异常的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

07-20 09:55:18.025: E/AndroidRuntime(7924): FATAL EXCEPTION: main
07-20 09:55:18.025: E/AndroidRuntime(7924): android.view.InflateException: Binary XML file line #23: Error inflating class com.tongda.sport.UI.BallFriendsItem
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.LayoutInflater.createView(LayoutInflater.java:683)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:757)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:816)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:819)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.LayoutInflater.inflate(LayoutInflater.java:559)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.LayoutInflater.inflate(LayoutInflater.java:417)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at com.tongda.sport.fragment.RunActivityFragment.onCreateView(RunActivityFragment.java:15)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1064)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.view.ViewPager.populate(ViewPager.java:911)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.View.measure(View.java:15297)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.View.measure(View.java:15297)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4950)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.view.View.measure(View.java:15297)
07-20 09:55:18.025: E/AndroidRuntime(7924):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)

在网上找到了很多方法,都没改正,后来针对自己的代码一行一行的看,发现了问题,原来是自己在attr.xml文件中定义个的属性名字和    ballfriend1=attrs.getAttributeValue("http://schemas.android.com/apk/res/com.tongda.sport", "ballfriendsname")得到属性值的名字不同,改正之后完全解决的这个问题


2015.7.23号,今天又碰到这个问题,按之前自己的方法和网上所有的方法都试过了,都没有用。之后自己开始尝试把其三种构造方法都加上,然后看logcat里面打印的是空指针异常,然后找到空指针报错的地方将其修正就好了

class DateTimeDialog(context: Context) : BoyaBottomDialog(context, false, true){ private val binding: DialogDateTimeViewBinding by lazy { DataBindingUtil.inflate(layoutInflater, R.layout.dialog_date_time_view,null,false) } override fun bindView(): View { binding.apply { pickerCancel.setOnClickListener { wheelViewPickClickListener?.onPickCancelClick() dismiss() } pickerOk.setOnClickListener { //wheelViewPickClickListener?.onPickOkClick(wvChoose.currentPosition) dismiss() } // if (textNoBg == true){ // wvChoose.curtainColor = Color.parseColor("#FF222222") // } // wvChoose.data = stringList // wvChoose.setDefaultValue(defaultValue) } /*val layoutParams = binding.wvChoose.layoutParams if (languageType == "zh") { layoutParams.width = DisplayUtils.dp2px(100f) }else{ layoutParams.width = DisplayUtils.dp2px(180f) } binding.wvChoose.layoutParams = layoutParams*/ return binding.root } fun setDefaultValue(it: String){ //binding.wvChoose.setDefaultValue(it) } fun setDefaultTitle(title: String,isVisibility: Boolean? = false){ binding.pickerTitle.text = title if (isVisibility == true){ binding.pickerTitle.visibility = View.VISIBLE }else{ binding.pickerTitle.visibility = View.GONE } } var wheelViewPickClickListener: WheelViewPickClickListener? = null interface WheelViewPickClickListener{ fun onPickOkClick(pickPosition: Int) fun onPickCancelClick() } } Process: com.boya.eco, PID: 17644 android.view.InflateException: Binary XML file line #72 in com.boya.eco:layout/dialog_date_time_view: Binary XML file line #72 in com.boya.eco:layout/dialog_date_time_view: Error inflating class com.boya.common.ui.widget.DatePickerView Caused by: android.view.InflateException: Binary XML file line #72 in com.boya.eco:layout/dialog_date_time_view: Error inflating class com.boya.common.ui.widget.DatePickerView Caused by: java.lang.reflect.InvocationTargetException
03-13
package com.example.newviewapplication; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; public class CustomView extends View { private Paint mPainter; public CustomView(Context context) { super(context); init(); } public CustomView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); init(); } public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray t = context.obtainStyledAttributes(attrs,R.styleable.CustomView); int mColor = t.getColor(R.styleable.CustomView_circle_color,Color.BLUE); t.recycle(); mPainter.setColor(mColor); init(); } public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } private void init(){ mPainter = new Paint(); mPainter.setColor(Color.RED); mPainter.setStrokeWidth(5f); mPainter.setStyle(Paint.Style.FILL); } @Override protected void onDraw(@NonNull Canvas canvas) { super.onDraw(canvas); //padding生效 // 获取传入的padding值 final int paddingLeft = getPaddingLeft(); final int paddingRight = getPaddingRight(); final int paddingTop = getPaddingTop(); final int paddingBottom = getPaddingBottom(); // 获取绘制内容的高度和宽度(考虑了四个方向的padding值) int width = getWidth() - paddingLeft - paddingRight ; int height = getHeight() - paddingTop - paddingBottom ; // 设置圆的半径 = 宽,高最小值的2分之1 int r = Math.min(width, height)/2; // 画出圆(蓝色) // 圆心 = 控件的中央,半径 = 宽,高最小值的2分之1 canvas.drawCircle(paddingLeft+width/2,paddingTop+height/2,r,mPainter); } //wrap_content生效 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // 获取宽-测量规则的模式和大小 int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); // 获取高-测量规则的模式和大小 int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); // 设置wrap_content的默认宽 / 高值 // 默认宽/高的设定并无固定依据,根据需要灵活设置 // 类似TextView,ImageView等针对wrap_content均在onMeasure()对设置默认宽 / 高值有特殊处理,具体读者可以自行查看 int mWidth = 400; int mHeight = 400; // 当布局参数设置为wrap_content时,设置默认值 if (getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT && getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT) { setMeasuredDimension(mWidth, mHeight); // 宽 / 高任意一个布局参数为= wrap_content时,都设置默认值 } else if (getLayoutParams().width == ViewGroup.LayoutParams.WRAP_CONTENT) { setMeasuredDimension(mWidth, heightSize); } else if (getLayoutParams().height == ViewGroup.LayoutParams.WRAP_CONTENT) { setMeasuredDimension(widthSize, mHeight); } } } 代码报错:FATAL EXCEPTION: main Process: com.example.newviewapplication, PID: 15829 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.newviewapplication/com.example.newviewapplication.MainActivity}: android.view.InflateException: Binary XML file line #15 in com.example.newviewapplication:layout/activity_main: Binary XML file line #15 in com.example.newviewapplication:layout/activity_main: Error inflating class com.example.newviewapplication.CustomView
最新发布
07-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值