• 自定义View


    自定义viewGroup

    一、ViewGroup概述

    1、ViewGroup是一个容器,而这个容器是继承与View的。

    2、ViewGroup是一个基类,并且是Layout和一些View组件的基类。

    二、ViewGroup的三个方法

    1、onLayout方法

    1. @Override
    2. protected void onLayout(boolean changed, int l, int t, int r, int b) {
    3. }

    在我们继承ViewGroup时会在除了构造函数之外提供这个方法,我们可以看到,在ViewGroup的源代码中方法是这样定义的,也就是父类没有提供方法的内容,需要我们自己实现。
    当View要为所有子对象分配大小和位置时,调用此方法

    2、addView方法

    1. public void addView(View child) {
    2. addView(child, -1);
    3. }

     a.可以是:条目布局 

    1. //加载条目布局
    2. 一:
    3. LayoutInflater.from(context).inflate(R.layout.input_number_view, this, true);
    4. 二:
    5. View view = LayoutInflater.from(context).inflate(R.layout.input_number_view, this, false);
    6. addView(view);

    这个方法是用来向View容器中添加组件用的。我们可以使用这个方法想这个ViewGroup中添加组件。

    3、getChildAt方法

    1. public View getChildAt(int index) {
    2. if (index < 0 || index >= mChildrenCount) {
    3. return null;
    4. }
    5. return mChildren[index];
    6. }

    这个方法用来返回指定位置的View

    小练习:流式布局

    1. package com.example.customviewfortutu;
    2. import android.content.Context;
    3. import android.graphics.Color;
    4. import android.util.AttributeSet;
    5. import android.view.View;
    6. import android.view.ViewGroup;
    7. import android.widget.TextView;
    8. import java.util.ArrayList;
    9. import java.util.List;
    10. /**
    11. * 流式布局
    12. * 2022/11/8
    13. */
    14. public class FlowLayout extends ViewGroup {
    15. /**
    16. * 水平间距
    17. */
    18. private int mHorizontalMargin = 40;
    19. /**
    20. * 垂直间距
    21. */
    22. private int mVerticalMargin = 40;
    23. public FlowLayout(Context context) {
    24. this(context, null);
    25. }
    26. public FlowLayout(Context context, AttributeSet attrs) {
    27. this(context, attrs, 0);
    28. }
    29. public FlowLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    30. super(context, attrs, defStyleAttr);
    31. List dataList = new ArrayList<>();
    32. dataList.add("格纹大衣");
    33. dataList.add("网面鞋子清洁");
    34. dataList.add("鞋子清洁");
    35. dataList.add("鞋子塑封膜");
    36. dataList.add("早秋chic上衣甜辣");
    37. dataList.add("打底ins");
    38. dataList.add("打底");
    39. dataList.add("冬天懒人鞋");
    40. dataList.add("冬鞋一脚蹬");
    41. dataList.add("冬鞋");
    42. dataList.add("格纹大衣");
    43. dataList.add("网面鞋子清洁");
    44. dataList.add("鞋子清洁");
    45. dataList.add("鞋子塑封膜");
    46. dataList.add("早秋chic上衣甜辣");
    47. dataList.add("打底ins");
    48. dataList.add("打底");
    49. dataList.add("冬天懒人鞋");
    50. dataList.add("冬鞋一脚蹬");
    51. dataList.add("冬鞋");
    52. setData(dataList);
    53. }
    54. //设置数据
    55. public void setData(List dataList) {
    56. for (String s : dataList) {
    57. TextView textView = new TextView(getContext(
  • 相关阅读:
    Java中的Listener和Adapter
    Hexo博客使用aplayer音乐播放插件
    CSS核心使用
    C/C++文件操作(细节满满,part2)
    进一步了解视频美颜SDK:美颜SDK的技术原理
    Apache ShenYu 学习笔记一
    主板与品牌电脑启动快捷键
    单链表之:【头插法反转链表】【反转链表的一部分】
    数据结构与算法之美10(排序)
    优麒麟下载、安装、体验
  • 原文地址:https://blog.csdn.net/tzztzz01/article/details/127738943