android动态居中布局,Android动态添加布局的两种方式

释放双眼,带上耳机,听听看~!

前言

大多数时候我们布局都是用xml来布局的,但有些时候也是会用到动态布局的,尤其是在一些大项目中,动态布局更是体现的淋漓尽致。

所以今天我们就来学习一些动态加添布局的两种方式,分别是

动态添加xml布局

另外写一个xml布局,然后通过java的方式让他加载他主布局上

动态添加java布局

通过java写出一个布局,然后再通过java的方式让他加载他主布局上

一、动态添加xml布局

步骤

第一步构造容器

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(

LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

第二步构造xml文件

这里我们就主布局添加个button就可以了,用来点击加载xml布局,被添加布局里面我就写一个TextView,由于比较简单这里就不贴了

第三步构造LayoutInflater

提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutInflater找res/layout/下的xml布局文件来实例化的。

而LayoutInflater有三种方式

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或

LayoutInflater inflater = LayoutInflater.from(Activity.this);或

LayoutInflater inflater = getLayoutInflater();

这三种方法本质是相同的。

第四步inflate()加载布局

用LayoutInflater.inflate() 将LayOut文件转化成VIew。

View view = inflater.inflate(R.layout.block_gym_album_list_item, null);

this.addContentView(view,lp);

关于第一步显示布局的详细介绍

改变布局主要是通过改变LayoutParams来实现的,LayoutParams继承于Android.View.ViewGroup.LayoutParams。它相当于一个Layout的信息包,封装了Layout的位置、高、宽等信息。需要注意的是,需要注意到要修改的View的父容器是什么类型的,FrameLayout,LinearLayout,RelativeLayout等,因为不同类型的LayoutParams是不同的。

上述代码与以下xml布局代码作用相同:

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"/>

改变布局位置

addRule可传入不同的布局参数,如addRule(RelativeLayout.BELOW, R.id.XXX); 表示该View位于XXX下面。常用的布局参数有以下:

layoutParams.alignWithParent = true 如果对应的兄弟元素找不到的话就以父元素做参照物

RelativeLayout.CENTER_HORIZONTAL 在父控件中水平居中

RelativeLayout.CENTER_VERTICAL 在父控件中垂直居中

RelativeLayout.CENTER_IN_PARENT 相对于父控件完全居中

RelativeLayout.ALIGN_PARENT_BOTTOM 紧贴父控件的下边缘

RelativeLayout.ALIGN_PARENT_TOP 紧贴父控件的上边缘

RelativeLayout.ALIGN_PARENT_LEFT紧贴父控件的左边边缘

RelativeLayout.ALIGN_PARENT_RIGHT 紧贴父控件的右边缘

RelativeLayout.ABOVE 在某元素的上方 需要第二个参数为某元素的ID

RelativeLayout.BELOW 在某元素的下方 需要第二个参数为某元素的ID

RelativeLayout.LEFT_OF 在某元素的左边 需要第二个参数为某元素的ID

RelativeLayout.RIGHT_OF 在某元素的右边 需要第二个参数为 某元素的ID

RelativeLayout.ALIGN_TOP 本元素的上边缘和某元素的的上边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_BOTTOM 本元素的上边缘和某元素的的下边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_LEFT 本元素的上边缘和某元素的的左边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_RIGHT 本元素的上边缘和某元素的的右边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_BASELINE 本元素的基线和某元素的的基线对齐 需要第二个参数为某元素的ID

二、动态添加java布局

我们这里还是以TextView为例,其实动态添加java布局和xml布局有异曲同工之处,无非就是用java的方式写出控件,然后添加进布局里

第一步构造容器

和上面xml布局的一样,所以这里就不贴了

第二步构造控件布局框架

其实和xml的第二步也是一样的,只不过xml已经写好了最外层的布局,所以我们也要用java写出一个布局,好在里面放控件

LinearLayout view = new LinearLayout(this);

view.setLayoutParams(lp);//设置布局参数

view.setOrientation(LinearLayout.HORIZONTAL);// 设置子View的Linearlayout// 为垂直方向布局

//定义子View中两个元素的布局

ViewGroup.LayoutParams vlp = new ViewGroup.LayoutParams(

ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

第三步添加控件

其实这一步也没有什么好讲的,就是xml添加控件的方式改成java添加

TextView tv1 = new TextView(this);

tv1.setLayoutParams(vlp);//设置TextView的布局

tv1.setText("姓名:");

第四部将控件添加至容器

view.addView(tv1);//将TextView 添加到子View 中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看了 72 位图灵奖得主成就,才发现我对计算机一无所知

来源:人工智能AI技术今天是计算机科学之父、人工智能之父 艾伦麦席森图灵 诞辰 108 周年。作为“图灵意志”的传承者,依照惯例,在今日纪念这位伟人。从“图灵机”到“图灵测试”,从破译德军的 Enigma 到自杀之谜,图灵一…

android 怎么改变字体颜色,安卓系统字体颜色修改教程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼反编辑framework-res.apk1.修改内容如下:打开res/values/colors.xml找到 回编辑后需要把你在apk中的改过的xml文件替换到原版apk中,修改了带value字样文件夹下的xml要替换apk中resources.arsc这个文件#ffc8c…

prop attr 到底哪里不一样?

好吧 首先承认错误 说好的每天进行一次只是总结 但是我没坚持住 准确的来说 我并没有每天会学到了东西 但是 我一直在持续努力着 以后应该不会每天都写 但是自己觉得有用的 或者想加强记忆的 可能会写出来 我前段时间 看书的时候 注意到prop() 但是一直没用到过 今天就探…

【深度学习】解析深度神经网络背后的数学原理

来源:产业智能官解析深度网络背后的数学如今,已有许多像 Keras, TensorFlow, PyTorch 这样高水平的专门的库和框架,我们就不用总担心矩阵的权重太多,或是对使用的激活函数求导时存储计算的规模太大这些问题了。基于这些框架&#…

unity android 分包,Unity以分包(obb)形式集成到安卓原生 我慢慢填坑

Unity以分包(obb)形式集成到安卓原生 我慢慢填坑Unity以分包(obb)形式集成到安卓原生 我慢慢填坑工作中有需要将unity项目集成到安卓原生中,随着工作推进需要分包去发布到google ,那么这时候就需要在unity出包时进行分包(android project obb)。使用方法…

73岁Hinton老爷子构思下一代神经网络:属于无监督对比学习

机器之心报道编辑:魔王、杜伟在近期举行的第 43 届国际信息检索年会 (ACM SIGIR2020) 上,Geoffrey Hinton 做了主题为《The Next Generation of Neural Networks》的报告。Geoffrey Hinton 是谷歌副总裁、工程研究员,也是 Vector Institute 的…

面向对象引子

描述两个角色: 1 def hum(name,age,job):2 """这是代表一个人"""3 data {4 name:name,5 age:age,6 job:job7 }8 9 return data 10 11 def dog(name,type): 12 """这是代表一条旺财…

下一个十年的C位:物联网产业全景解析

来源:北京物联网智能技术应用协会导语:庄子曰:“天地与我并生,而万物与我为一”庄子将天地万物与人平等对待,打破了“以人类为中心”的桎梏。如果说互联网是以“人的需求”为中心构建的,那么物联网&#xf…

[数据挖掘]朴素贝叶斯分类

写在前面的话: 我现在大四,毕业设计是做一个基于大数据的用户画像研究分析。所以开始学习数据挖掘的相关技术。这是我学习的一个新技术领域,学习难度比我以往学过的所有技术都难。虽然现在在一家公司实习,但是工作还是挺忙的&…

网页html语言怎么看,怎样查看网页的css代码?

怎样查看网页的css代码?下面本篇文章给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。怎样查看网页的css代码?要查看一个网站使用了什么css代码,可以通过在网站空白处右键&#xff0c…

【精彩文章】数学家论数学——数学的本质

来源:数学算法俱乐部罗巴切夫斯基任何一门数学分支,不管它如何抽象,总有一天会在现实世界中找到应用.罗巴切夫斯基(Н.И.лобачевский,1792~1856,俄国数学家)是非欧几何的创始人之一&#xff0c…

解决sublime3不能编辑插件default settings的问题

一、遇见问题 今天给sublime安装了View In Browser,想更改一下默认启动的浏览器 preferences-Package settings-View In Browser-settings defaults 发现不能更改这个配置文件 二、解决问题 1.原因 通过查找资料,发现 sublime3默认不允许更改插件默认得配…

HTML将canvas画布鼠标事件,HTML5 Canvas鼠标与键盘事件demo示例

演示html5 canvas鼠标事件,获取canvas对象上的鼠标坐标,演示键盘事件通过键盘控制canvas上对象移动。canvas对象支持所有的javascript的鼠标事件,包括鼠标点击(mouseclick), 鼠标按下(mouse down), 鼠标抬起(mouse up),鼠标移动( mouse move)…

js——正则整理

1、示例 匹配网址url function IsURL(str_url){var strRegex "^((https|http|ftp|rtsp|mms)?://)" "?(([0-9a-z_!~*().&$%-]: )?[0-9a-z_!~*().&$%-])?" //ftp的user "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.…

html控制浏览器宽度和高度,html – 设置电子邮件和浏览器的tr和td宽度和高度

我正在制作HTML电子邮件,我想在发送之前在我的浏览器中预览它们,所以我希望它们在浏览器和电子邮件客户端中看起来类似.我已经尝试了几种方法来设置行和单元格的宽度和高度:TESTTEST通过HTML属性或样式属性设置高度没有成功.单元格覆盖了桌子的整个高度.编辑因为它似…

天价!一款芯片从设计到流片需要45亿!3纳米芯片研发成本曝光

来源:EETOP综合整理自IBS、科技新报英特尔宣布7纳米制程要延后半年问世,使晶圆代工龙头台积电有机会受惠英特尔扩大外包生产,竞争对手AMD 也因英特尔7纳米延后,产品持续维持竞争优势,两家公司股价都大涨。只是英特尔7纳…

计算机科学与技术专业改革,浅析计算机科学与技术专业教学改革

【摘要】社会的不断进步带动着科学技术的快速发展,人们对计算机技术的关注也越来越多,对高校计算机科学与技术专业也提出了更高的要求。计算机科学与技术专业需要与时俱进,与现代技术相结合,改变传统的教学模式与计划才能培养出符…

EUV光刻机全球出货量达57台

来源:内容编译自「semiwiki」,谢谢。IMEC是推动半导体技术前进的主要组织之一,日前,他们举办了一场线上论坛,谈及了对芯片现状和未来的看法。在演讲中,ASML总裁则对光刻的发展进行了演讲。从他的PPT中可以看…

配置 CentOS 7 的网络,及重命名网卡名

Centos 安装时应配置网络,如果当时没配置好,则装完系统后, 也可通过修改配置文件并重启网络服务进行配置。 说明:CentOS 7.0默认安装好之后是没有自动开启网络连接的!cd /etc/sysconfig/network-scripts/ #进入网络…

一个计算机台式机的组装方案,既能带又便宜的电脑组装方案,华擎deskmini310组装晒单...

既能带又便宜的电脑组装方案,华擎deskmini310组装晒单2019-04-17 10:39:4425点赞61收藏30评论前段时间家中的台式机陆陆续续已近阳寿,再组装一台机器的念头就油然而生。常年浏览大妈家的我发现了一样小众但蛮出名的迷你机箱——华擎deskmini310&#xff…