首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在安卓自定义ViewGroup上调用setMargins();?

在安卓自定义ViewGroup上调用setMargins()的方法如下:

  1. 首先,创建一个自定义的ViewGroup类,继承自android.view.ViewGroup。
代码语言:java
复制
public class CustomViewGroup extends ViewGroup {
    // 构造函数
    public CustomViewGroup(Context context) {
        super(context);
    }

    public CustomViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    // 重写onLayout方法
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        // 在这里设置子View的位置
        int childCount = getChildCount();
        for (int i = 0; i < childCount; i++) {
            View childView = getChildAt(i);
            // 设置子View的位置
            childView.layout(left, top, right, bottom);
        }
    }
}
  1. 在自定义ViewGroup类中,重写onMeasure方法,用于测量子View的大小。
代码语言:java
复制
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // 测量子View的大小
    int childCount = getChildCount();
    for (int i = 0; i < childCount; i++) {
        View childView = getChildAt(i);
        // 测量子View的大小
        measureChild(childView, widthMeasureSpec, heightMeasureSpec);
    }

    // 设置自定义ViewGroup的大小
    setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
}
  1. 在使用自定义ViewGroup的地方,调用setMargins()方法来设置子View的边距。
代码语言:java
复制
// 创建自定义ViewGroup的实例
CustomViewGroup customViewGroup = new CustomViewGroup(context);

// 创建子View
View childView = new View(context);
// 设置子View的布局参数
CustomViewGroup.LayoutParams layoutParams = new CustomViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置子View的边距
layoutParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
// 添加子View到自定义ViewGroup中
customViewGroup.addView(childView, layoutParams);

通过以上步骤,你可以在安卓自定义ViewGroup上调用setMargins()方法来设置子View的边距。请注意,这里的setMargins()方法是LayoutParams类的方法,用于设置子View的边距。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WebRTC 如何在系统采集视频数据

今天,我们就来先了解一下 WebRTC 在端是如何采集视频信号的。 正文 设备和苹果iOS设备都属于移动端,在音视频处理的很多地方都是类似的。...为此,WebRTC 为端和 iOS 端的 SDK 都提供了非常好用的 API 接口类。...其中,端的视频采集类是 CameraCapturer,注意,目前端的摄像头采集有两种方案,一种是使用比较传统的 Camera1Capturer 类,另一种是使用比较新的 Camera2Capturer...SurfaceTexture st) -> { hasPendingTexture = true; tryDeliverTextureFrame(); }, handler); 通过上面的六个简单步骤,我们就可以完成在系统摄像头采集和本地画面预览的效果...结论 本文基本已经介绍了 WebRTC 是如何在系统采集本地摄像头画面的,但是,这仅仅是众多流程中一个小环节,后续还有预览、编码、组包、传输、解包、解码、渲染等过程。

2.4K20

Android用户界面开发概述

一个视图(View)在屏幕占据了一块矩形区域,它负责渲染这块矩形区域(将这块矩形区域变成其他颜色),也可以处理这块矩形区域发生的事件(如用户单击事件),并且可以设置这块区域是否可见、是否可以获取焦点等...偶尔用到px的情况,是需要画1像素表格线或阴影线的时候,用其他单位dp会显得模糊。...端屏幕大小各不相同,根据其像素密度,主要分为几种规格,如下表所示。...setMargins(int, int, int, int) 指定该子组左下边的页边距 android:layout_marginRight setMargins(int, int, int, int... 在Java程序代码中通过调用方法进行控制。 实际不管使用哪种方式,它们控制Android用户界面行为的本质是完全一样的。大部分时候,控制UI组件的XML属性还有对应的方法。

2.3K100

Android自定义流式布局自动换行布局实例

最近,Google开源了一个流式排版库“FlexboxLayout”,功能强大,支持多种排版方式,各种方向的自动换行等,具体资料各位可搜索学习^_^。...使用FlexboxLayout这个框架未免显得有些臃肿,所以自己动手写了一个流式ViewGroup自定义ViewGroup的步骤是: 1. 新建一个类,继承ViewGroup 2....这一行所有子view相加的宽度大于容器的宽度,需要换行 //换行的首个子view,起始left应该为0+容器的paddingLeft left = getPaddingLeft(); //top的位置为一行中拥有最大高度的某个...LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); //外边距 params.setMargins...LayoutParams params = new LayoutParams(ConfigSingleton.dip2px(27), ConfigSingleton.dip2px(27)); //外边距 params.setMargins

3.6K20

Android训练课程(Android Training) - 构建你的第一个应用

开发包SDK工具可以很容易的创建一个由默认项目文件夹和文件组成的新的项目。...在真实设备运行 如果你拥有一个动力的设备,在这里展示了你如何安装和启动你的应用: 1.使用USB线将你的设备插入到你的开发机器(译者注:可能是电脑),如果你使用window是开发,你可能需要为你的设备安装适当的...2.在你的设备启用USB debugging(USB调试)模式 在很多运行在3.2或者更旧的版本的设备,你可以在选项设置里找到: 设置>应用程序>开发者 在4.0或者更新一些的版本,他存在于...提供了一个XML词汇表,它于view和ViewGroup的子类是一致的,这样你可以在XML中使用界面元素的层级来定义你的界面。 图一....注意: 你的SDK可能已经包含了最近的支持库(support library)。

2.1K00

第四夜 概念漫游(下)

第三夜 概念漫游()中,我介绍了最基本的功能单元和Intent的连接方式。在这个骨架之上,我们可以进一步增加一些与开发密切相关的重要概念。...每一种视图元素在中表示为一个View类,比如Button类,TextView类和EditText类。的视图元素很多样,就连图片和网页也都有对应的视图元素。...视图树 在设计中,我们往往要给View元素增加各种属性,以控制它们的文字、尺寸、大小、颜色等信息。对于ViewGroup来说,它有多个子类,代表了不同的布局方式。...可以理解这样的XML定义,并把XML节点实例化为内存中的对象,也就是Layout Inflate的过程。比如下面的XML记录: <?...Fragment的运行方式与Activity类似,也是在状态转换中调用onStart()等方法。 Resource 在开发中,有可能需要一些静态资源,比如图片、字符串、XML文件等等。

1K100

Android 面试官:简述一下 View 的绘制流程,这个都答不出来就别想拿Offer了

layout:用于摆放View在ViewGroup中的位置,如果是ViewGroup要在onLayout方法中对所有子View进行layout操作。 draw:往View绘制图像。...在自定义View宽高测量的过程中,我们需要获取MeasurSpac中的宽高和测量模式,自定义ViewGroup也必须给子View传递MeasurSpac,Android也给我们提供了计算MeasurSpac...这里今天给大家分享一份Android进阶学习资料,主要为相关知识点及面试资料为主,在这个PDF中,通过详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用...帮你在现在的基础,重新梳理和建立 Android 开发的知识体系。...一些基础不好的,这里也有一份基础资料包,帮助巩固基础。

6.3K31

Android开发之漫漫长途 番外篇——自定义View的各种姿势2

一番外篇不同的是本章的重点放在ViewGroup。我们知道ViewGroup是View的子类,Android系统中有许多控件继承自ViewGroup的控件。...自定义ViewGroup难度比较大,是因为ViewGroup要管理子View的测量、布局等。...{"Android", "Android移动", "Java", "UI设计师", "android实习", "android 移动","android...",""}; 适配器的实现十分简单,我们可以仿照Android系统自有的适配器 /** 抽象类 */ public abstract class MyTagAdapter {...最后附上这一篇以及一篇自定义View的全部源码Github传送门 ---- 下篇预告 如果有人提供想法,那么下一篇我们还是来自定义ViewGroup,如果没有,(我的博客貌似一直很少人评论),我们就来稍微歇歇

54830

android ScrollView实现下拉放大头部图片

(传送门: 自定义scrollView实现顶部图片下拉放大),那么我这里就只是在其基础修改了一点点而已,比如在代码中控制图片居中、增加动态设置放大的控件、使用自定义的最大放大倍数等,都是很简单的修改,...= null && getChildAt(0) instanceof ViewGroup && zoomView == null) { ViewGroup vg = (ViewGroup) getChildAt...private void setZoom(float s) { float scaleTimes = (float) ((zoomViewWidth+s)/(zoomViewWidth*1.0)); // 超过最大放大倍数...zoomViewHeight*((zoomViewWidth+s)/zoomViewWidth)); // 设置控件水平居中 ((MarginLayoutParams) layoutParams).setMargins...当距离不小于0的时候,开始放大控件,可以看到调用了setZoom方法,注意,在这里其实控件的下拉放大、拉恢复都做了, 回弹其实也是调用这个方法。 抬手的时候回弹,这个不需要说了。

1.3K00

android刘海屏适配(刘海屏或圆角适配)

P版本也就是刚发布的9.0 其中就加入了刘海屏相关的API。其相关行为与功能变更也是非常多的,从其变更的趋势及功能来看,google在进一步的收紧权限。...这样就导致我们不得不去适配P了。 在收到邮件后,查阅谷歌官方的资料,更新SDK。其中UI最大的改变就是需要适配刘海屏。...但是国内厂商为了快速抢占全面屏手机市场,在系统8.1的基础,硬件就弄出了刘海屏,例如华为nova 3e, oneplus 6, oppo r15, vivo x21,但是系统支持没有更,没有一个统一的...今天就来说说怎么适配8.1及P的刘海屏。 首先下载谷歌最新的SDK API 28及系统镜像。新建API 28的模拟器后,自定义分辨率,高宽比最好设置为2以上,比如2280 * 1080。...那为何在最下方出现黑色区域呢? 正如前面说到的系统默认支持的宽高比是1.7-1.8左右,现在流行的全面屏手机分辨率宽高比大于了这个数,导致屏幕区域不能利用完全,就出现了黑色区域。

1.9K10

应用内悬浮窗适配方案实战

作者 大家好,我叫小鑫,也可以叫我蜡笔小鑫; 本人17年毕业于中山大学,于2018年7月加入37手游团队,曾经就职于久邦数码担任开发工程师; 目前是37手游团队的海外负责人,负责相关业务开发...利用该接口可以在Activity添加View。 这里你可能会问: 1、那只能在一个Activity添加吧?...没错,是只能在当前Activity添加,但是由于游戏通常也就在一个Activity跑,因此基本是可以接受的。 2、只add一个view,那拖动怎么实现?...mLastX = (int) event.getRawX(); mLastY = (int) event.getRawY(); //拖拽时调用...因为有些游戏引擎不是在Activity跑的,而是在NativeActivity跑 3、方案三是我们当前采用的方案,目前还暂未发现有显示不出来之类的问题~ 4、本文讲述的方案只是Demo哈,实际使用还需要考虑刘海屏的问题

1.5K40

2018-07-25

rv1.png rv2.png rv3.png rv4.png rv5.png rv点击1.gif rv点击2.gif 增加与删除.gif CardView.gif 访问地址,返回Json数据.png 中使用....png 宽高.png 宽高控制.png 效果图 点击事件.gif 点击事件升级.gif 与Path结合.png 方向.png 拉环控件 拉环控件.gif 混沌战士 网格坐标系效果 深拷贝.png...2.png 点击ViewGroup 1.png 点击ViewGroup.png ViewGroup.png 极坐标绘图2.png 极坐标绘图1.png 极坐标绘图.png handler1.png 结果....png handler2.png 延迟.gif empty.png post.png runout.png 接口.png json.png retrofit1.png json.png 获取json.png...获取json异步.png 请求图片结果.png 定义参数.png pull解析.png use_svg.png 局限性.png 关于密码问题.png 发送邮箱.png 发送html邮件.png 发送附件

81420

RelativeLayout.LayoutParams学习与运用

1、了解LayoutParams 其实LayoutParams就是代表一个布局属性,每一个ViewGroup对应一种LayoutParams。...下面以RelativeLayout.LayoutParams为例: (1)RelativeLayout.LayoutParams.setMargins(left, top, right, bottom...比如一个自定义的开关控件,我们在创建它的时候,它初始化应该是开的状态还是关的状态,这个需要我们获取到具体数据后再去调整它的状态,在调整它的状态的时候,我们有可能就会使用到LayoutParams来调整位置...如下方法是在自定义控件内部提供的方法,供Activity中调用来调整自己的开关位置: public void initChecked(boolean ischecked){ RelativeLayout.LayoutParams...checkThumb_length = checkThumb.getWidth(); int track_length = view.getWidth(); params.setMargins

29010

几行代码搞定画廊效果

上下文来获取根布局以及一些其他的操作,还有List数据,当前itemView的position位置,以及大图的资源文件,因为大图的资源文件未知,所以我这里使用了泛型,我们大概就只需要这么多的参数,好了,接下来开始大段的代码,代码都写了注释...//获取当前activity下的根布局 ViewGroup vp= (ViewGroup) ((Activity)context).findViewById(android.R.id.content...); ViewGroup rootView = (ViewGroup) vp.getChildAt(0); if (!...final ViewGroup rv = (ViewGroup) itemView.getParent(); if(!...另外还有一个就是我们再点击时如果滑动的话,我们动画的位置是不准确的,所以我们要在点击时尽量避免RecyclerView的滑动,但是该怎么做呢,首先我想到的是自定义view,通过判断canScroll系列的

1K10

React-Native 预加载优化方案

本文作者:ivweb 朱灵子 React-Native预加载优化方案 本文针对使用React Native开发混合应用的过程中端白屏时间较长的问题,提出了react-native端RootView...预加载优化方案,本文主要围绕以下几个方面展开分析: 导致React-Native端白屏时间较长的关键性因素 React-Native预加载优化方案 React-Native预加载方案实现细节...对比IOS端与Android端的首屏时间数据,我们发现端占有一定的劣势,我们在启动React-Native应用时,会发现第一次启动React-Native页面会有一个短暂的白屏过程,而且在完全退出后再进入...因此,java执行效率较OC来讲相对较低,端机型总体性能与IOS相比占有相对劣势都是导致React-Native端bundle离线包加载与解析的时间较长的原因,也是造成React-Native端白屏时间较长的关键性因素...React-Native预加载优化方案 为了优化React-Native端线上业务的用户体验,我们提出了React-NativeBundle预加载优化方案 首先展示的是React-Native

5.6K11
领券