首页 > 其他分享 >Android开发 - LayoutParams解析

Android开发 - LayoutParams解析

时间:2024-07-23 10:21:31浏览次数:8  
标签:ViewGroup LayoutParams height width int Android 解析 public

  • LayoutParams翻译过来就是布局参数子View通过LayoutParams告诉父容器(ViewGroup)应该如何放置自己。从这个定义中也可以看出来LayoutParamsViewGroup是息息相关的,因此脱离ViewGroupLayoutParams是没有意义的。事实上,每个ViewGroup的子类都有自己对应的LayoutParams类,典型的如LinearLayout.LayoutParamsFrameLayout.LayoutParams等,可以看出来LayoutParams都是对应ViewGroup子类的内部类。最基础的LayoutParams是定义在ViewGroup中的静态内部类,封装着View宽度和高度信息,对应着自定义View.xml视图中的layout_widthlayout_height属性。主要源码如下:

    public static class LayoutParams {
        public static final int FILL_PARENT = -1;
        public static final int MATCH_PARENT = -1;
        public static final int WRAP_CONTENT = -2;
    
        public int width;
        public int height;
    
        ......
    
        /**
         * XML文件中设置的以layout_开头的属性将在这个方法中解析
         */
        public LayoutParams(Context c, AttributeSet attrs) {
            TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.ViewGroup_Layout);
            // 解析width和height属性
            setBaseAttributes(a,
                    R.styleable.ViewGroup_Layout_layout_width,
                    R.styleable.ViewGroup_Layout_layout_height);
            a.recycle();
        }
    
        /**
         * 使用传入的width和height构建LayoutParams
         */
        public LayoutParams(int width, int height) {
            this.width = width;
            this.height = height;
        }
    
        /**
         * 通过传入的LayoutParams构建新的LayoutParams
         */
        public LayoutParams(LayoutParams source) {
            this.width = source.width;
            this.height = source.height;
        }
        ......
    }
    
  • 弄清楚了LayoutParams的意义,就可以解释为什么在自定义View.xml视图View的某些属性是以layout_开头的了。因为这些属性并不直接属于View,而是属于这些ViewLayoutParams,这样的命名方式也就显得很贴切了

标签:ViewGroup,LayoutParams,height,width,int,Android,解析,public
From: https://www.cnblogs.com/ajunjava/p/18317663

相关文章

  • android audio不同音频流,(六)settings内音频流音量调整
    (1)settings内,可设置音频流音量,如下图:(2)settings调整音量条进度,会触发SeekBarVolumizer对象:SeekBarVolumizer文件路径:frameworks/base/core/java/android/preference/SeekBarVolumizer.javaSeekBarVolumizer对象,handle会接到MSG_SET_STREAM_VOLUME事件:publicbooleanhandl......
  • android在一个TextView中设置不同字体大小、不同字体颜色封装
    一、概述在开发过程中遇到过这样一种业务,有很多单行文本字体。字符串中每一部分的字体样式、大小、颜色都不相同。传统的做法是放多个TextView以达到效果。但是当这个页面中的这样的元素非常多,且非常复杂的时候,就会出现页面加载缓慢的问题(view加载=深度(递归)+平铺),也就是......
  • Android开发 - Context解析
    Context是什么Context的中文翻译为:语境;上下文;背景;环境,在开发中我们经常说称之为“上下文”,那么这个“上下文”到底是指什么意思呢?在语文中,我们可以理解为语境,在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。比如微信聊天,此时的“环境”是指......
  • Android开发 - Bundle传值的理解与使用
    什么是BundleBundle经常出现在以下场合:Activity状态数据的保存与恢复涉及到的两个回调:voidonSaveInstanceState(BundleoutState)voidonCreate(BundlesavedInstanceState)Fragment的setArguments方法:voidsetArguments(Bundleargs)消息机制中的Message的setData......
  • Gson的基本使用:解析Json格式数据 序列化与反序列化
    目录一,Gson和Json1,Gson2,Json3,Gson处理对象的几个重要点4,序列化和反序列化二,Gson的使用1,Gson的创建2,简单对象序列化3,对象序列化,格式化输出日期4,嵌套对象序列化5,对象数组序列化6,对象集合序列化一,Gson和Json1,Gson        Gson是Google发布的一个Java库,可......
  • Android 常见面试题(一)
    Android常见面试题(一)1、java中==和equals和hashCode的区别基本数据类型的==比较的值相等.类的==比较的内存的地址,即是否是同一个对象。在不重写equals方法的情况下,equals同比较内存地址,原实现也为==,如String等重写了equals方法,会判断字符串里的值是否相等......
  • 数据库迁移的神秘面纱:Liquibase异常全解析与解决之道
    哈喽,大家好,我是木头左!一、Liquibase简介与重要性Liquibase,这个名字听起来就像是液体的魔法。在软件开发的世界里,它确实是一种魔法,一种让数据库变更变得清晰、可控甚至可逆的魔法。但就像所有魔法一样,掌握它需要了解它的规则和秘密。今天,就来揭开Liquibase的神秘面纱,特别是那些......
  • Android4.4.4双声卡同时出声
    在调试RK3288Android4.4.4,该方案默认配置上SPDIF时HDMI就没声音,但客户需求是同时要有声音的,于是驱动配置上后,呈现两个声卡状态,此时需要通过修改HAL层来处理(RK3288Android4.4.4对应的HAL层源码为hardware/rk29/audio目录),修改如下:1.修改AudioHardware.cpp文件,在AudioHardware:......
  • 20-c语言main函数参数`argc` 和 `argv[]` 解析
    argc和argv[]解析argc和argv[]是main函数的参数,用于处理命令行参数。一、示例命令行调用./a.out123345解释:./a.out是程序名,也是第一个参数。123和345是运行时传递的额外参数。二、main函数定义intmain(intargc,charconst*argv[]){re......
  • 深入理解 Java 类加载机制:Arthas classloader 命令解析
    引言Java虚拟机(JVM)的类加载机制是Java应用运行的基础。了解类加载器(ClassLoader)的工作原理对于解决类冲突、热部署、资源查找等问题至关重要。Arthas,作为一个强大的Java诊断工具,提供了classloader命令,帮助开发者深入理解JVM的类加载机制。本文将详细介绍classloa......