Android自定义UI模板

学习慕课网的一个教程,实现一个自定义TopBar:
Android自定义UI模板

  • 一、attrs.xml
    LinearLayout继承自ViewGroup,各个属性都来自于attrs.xml文件中定义的。
    我们首先定义一个attrs.xml文件,配置我们的布局中需要定义的属性:
    Android自定义UI模板
  • 二、定义自己的View: TopBar.java
  1. 定义需要的控件对象,两个button和一个textview
  2. 定义各个控件的属性值
  3. 在构造方法中,通过TypedArray获取在xml定义的属性:
    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TopBar);
    ta中就包含了所有属性和值的映射,并从中获取属性的值。如图:
    Android自定义UI模板
    这样我们就取出了所有我们自定义的属性值,并将它们赋给相应的控件。
    记得使用完TypedArray后,对他进行ta.recycle(),将其回收,避免浪费资源以及一些缓存错误。
  4. 之后实例化之前定义的button和textview,并将我们之前获取的属性值赋给它们,如图: Android自定义UI模板Android自定义UI模板
  5. 接下来将我们的控件放到ViewGroup里面
    • 先为每个控件定义一个LayoutParams的变量,然后实例化这几个变量。
    • 在实例化时,同时设置控件的layout_wight和layout_height属性,然后再设置居中等其他属性。
    • 最后调用addView()方法,将我们的控件按照我们设置的params的模式添加到我们的viewgroup:
      Android自定义UI模板
  • 三.引用我们自定义的布局
    • 在使用我们的布局时,一定要有完整的包名
    • 为了能使用我们自己定义的属性,首先仿照系统的例子,要在开头添加一个name space(xmlns) :xmlns:myown=http://schemas.android.com/apk/res-auto
      mywon是自己命名空间的名字,不能和系统的重复。
    • 这样通过myown就可以引用我们在attrs.xml中定义的属性了:
      Android自定义UI模板
  • 四.为两个Button添加点击事件
  1. 在TopBar.java中直接添加button的点击事件:
    Android自定义UI模板
  2. 为了能在不同的页面实现不同的点击事件,我们要实现动态的改变事件
    这里用到了接口回调机制:
    我们在设置点击事件时,是为setOnClickListener()提供了一个匿名内部类,匿名内部类中才是我们要实现的逻辑。
    (1)我们定义一个接口:
    Android自定义UI模板
    (2)暴露一个方法给调用者,这个方法传入一个上面接口类型的参数,同时定义一个变量来映射传进来的接口:
    Android自定义UI模板
    (3) 然后在我们的点击事件中,直接调用接口的两个方法:listener.leftClick();和listener,rightClick();
    Android自定义UI模板
    (4) 在调用者调用时,通过暴露出来的这个setOnClickListener()方法,来实现其想要实现的点击逻辑。
    Android自定义UI模板
  • 五.此外,我们可以暴露其他方法,来实现某些功能
    比如设置左边button是否显示:
    Android自定义UI模板
    下面是慕课网教程链接:
    https://www.imooc.com/video/5079
    文章主要供自己学习,如有侵权请联系我删除