Andorid 自定义view之问题汇总

Andorid 自定义view之问题汇总

1.本文介绍

本文主要作用于本人从基础开始学习自定义view遇到的各种坑,以及帮助还没有来的学习自定义view的小伙伴做个简单的预防,因为也是第一次写博客,有些地放写的不够好的请大家多担待!!!其中自定义view的各种理论知识网上一搜一大推,这里就不在介绍了,下面我们就直接开始。

2.相关链接

  1. HenCoder Android 开发进阶: 自定义 View 1-1 绘制基础
  2. Kotlin语言中文网
  3. Android自定义View构造函数详解

3.正文

本文主要使用的是ktolin语言,建议没有了解过的小伙伴们去上面的链接学习一下,废话不多说,这就开始。

  1. 首先我们开始创建一个类用来继承我们想要重写的View,这里我继承的是view。
    代码中画了一个简单的圆
    然后布局中引用view,
    简单的圆已经画好了
    简单的自定义圆到这里就已经画好,本篇终。。。。。
    然后今天的内容就算结束了。当然,这篇文章也可以关掉了。但是我们还要运行一遍看看,毕竟能运行并且没有bug的代码才算完功。
    运行结果。。。。。。
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.administrator.customview, PID: 18148
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.administrator.customview/com.example.administrator.customview.MainActivity}: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.example.administrator.customview.CircleView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.example.administrator.customview.CircleView
     Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class com.example.administrator.customview.CircleView
     Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
        at java.lang.Class.getConstructor0(Class.java:2320)
        at java.lang.Class.getConstructor(Class.java:1725)
        at android.view.LayoutInflater.createView(LayoutInflater.java:615)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
        at com.example.administrator.customview.MainActivity.onCreate(MainActivity.java:12)
        at android.app.Activity.performCreate(Activity.java:7183)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)


10行的代码竟然闪退,我******,下面我们开始找问题(平复一下心情)。

Binary XML file line #9: Binary XML file line #9: Error inflating
class com.example.administrator.customview.CircleView Binary XML file
line #9: Error inflating class
com.example.administrator.customview.CircleView Binary XML file line
#9: Binary XML file line #9: Error inflating class com.example.administrator.customview.CircleView

整体来说是这里出现了问题,但是并没有明显的说明什么问题。

  1. 可能是包名出现了问题。(不过检查之后并没有发现包名不对)
  2. CircleView类写的不正确。(在多次检查之后并没有什么语法错误)
  3. 构造问题,布局引用需要重写(关于构造问题请移步:Android自定义View构造函数详解
     public View(Context context, @Nullable AttributeSet attrs) {
            this(context, attrs, 0);
        }

带着目标重新审查一下代码,确实CircleView并没有重写这个构造

class CircleView(context: Context?) : View(context)

修改代码为:

class CircleView(context: Context?, attributeSet: AttributeSet) :View(context)

再重新运行一下已经没有问题了。一个简单的自定义view就已经画好了,

待续

这是我刚开始学自定义view遇到的问题,因为我英语并不是很好,看api看的不是很多,所以就记录一下,也是帮助一下以后遇到这种坑的小伙伴们一个快速的解决方法。不过还是建议大家在学习新东西的时候去看一下api会少很多弯路。

                                     **所谓热爱,就是坚持和投入**
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值