android中gravity什么意思,详解介绍android:layout_gravity 和 android:gravity 之间的区别
android开发必遇问题,最有可能忘记两者之间的区别的问题之一
如下是google搜索出来的结果
记忆方法
联想/形像記法喎? f/ware/vc/"="" target="_blank" class="keylink">vcd4ncjxwpiogwpvtw7pj1lgx5mg/tctk9nduvmfcvkosz3jhdml0ecrhwoc1xlpj1lgx5mg/o6zx1mi7vs3kx7/y1sbx073ateo1xmxfsobqp7n7o6zj6nbd19s8ustasr+1xmxfsobw2ndeo6y8tmxfsobe2rk/19pa4lxess7k/agjphn0cm9uzz7fxbdmy/ziy7xe1tjqxcjw97avktwvc3ryb25npjwvcd4ncjxwpiogbgf5b3v0x2dyyxzpdhm1xmew17rt0gxhew91dkosvltk9npatgf5b3v0ugfyyw1zwoc1xmr00ntwtaosylu680xhew91dfbhcmftc8rhupi4uhzpzxftw7xeo6y8tcbsyxlvdxrfz3jhdml0ecrhyejww9fuvlru2ri4dmlld7xexcww5tbyteojrly0sbvfxbdmyrg1xlloyv2jotxzdhjvbmc+sbvl/mjlxcww5rxe1tjqxkoosbu2r6oppc9zdhjvbmc+pc9wpg0kpggxps7etbxltcp3pc9omt4ncjxomj5hbmryb2lkomdyyxzpdhk8l2gypg0kpha+pgltzybhbhq9"这里写图片描述" src="/uploadfile/collfiles/20180606/2018060608595671.png" title="\" />
关键字 should position , 主动
android:layout_gravity
关键字 should be placed, 被动
源码左证
如下是linearlayout的onlayout函数中可以看到两个参数的使用情况
void layoutvertical(int left, int top, int right, int bottom) {
final int paddingleft = mpaddingleft;
int childtop;
int childleft;
// where right end of child should go
final int width = right - left;
int childright = width - mpaddingright;
// space available for child
int childspace = width - paddingleft - mpaddingright;
final int count = getvirtualchildcount();
final int majorgravity = mgravity & gravity.vertical_gravity_mask;
final int minorgravity = mgravity & gravity.relative_horizontal_gravity_mask;
// 使用mgravity来计算第一个子view的top
switch (majorgravity) {
case gravity.bottom:
// mtotallength contains the padding already
childtop = mpaddingtop + bottom - top - mtotallength;
break;
// mtotallength contains the padding already
case gravity.center_vertical:
childtop = mpaddingtop + (bottom - top - mtotallength) / 2;
break;
case gravity.top:
default:
childtop = mpaddingtop;
break;
}
for (int i = 0; i < count; i++) {
final view child = getvirtualchildat(i);
if (child == null) {
childtop += measurenullchild(i);
} else if (child.getvisibility() != gone) {
final int childwidth = child.getmeasuredwidth();
final int childheight = child.getmeasuredheight();
//在排子view时才使用到子view的layoutparams中的gravity
final linearlayout.layoutparams lp =
(linearlayout.layoutparams) child.getlayoutparams();
int gravity = lp.gravity;
if (gravity < 0) {
gravity = minorgravity;
}
相关补充
viewgroup是个抽象类,子类继承它时需要override onlayout方法 linearlayout、relativelayout等viewgroup子类就分别实现了自己的排版算法(override onlayout方法) viewgroup子类们在排版过程中使用到gravity与layout_gravity等参数来排版子view(内容),值得注意的是mgravity不是viewgroup的成员变量,另外各子类的排版策略是不一样的,所以gravity不是必须存在的与使用的,如framelayout
如下是framelayout的onlayout方法的代码
protected void onlayout(boolean changed, int left, int top, int right, int bottom) {
layoutchildren(left, top, right, bottom, false /* no force left gravity */);
}
void layoutchildren(int left, int top, int right, int bottom,
boolean forceleftgravity) {
final int count = getchildcount();
final int parentleft = getpaddingleftwithforeground();
final int parentright = right - left - getpaddingrightwithforeground();
final int parenttop = getpaddingtopwithforeground();
final int parentbottom = bottom - top - getpaddingbottomwithforeground();
for (int i = 0; i < count; i++) {
final view child = getchildat(i);
if (child.getvisibility() != gone) {
final layoutparams lp = (layoutparams) child.getlayoutparams();
final int width = child.getmeasuredwidth();
final int height = child.getmeasuredheight();
int childleft;
int childtop;
int gravity = lp.gravity;
if (gravity == -1) {
gravity = default_child_gravity;
}
final int layoutdirection = getlayoutdirection();
final int absolutegravity = gravity.getabsolutegravity(gravity, layoutdirection);
final int verticalgravity = gravity & gravity.vertical_gravity_mask;
switch (absolutegravity & gravity.horizontal_gravity_mask) {
case gravity.center_horizontal:
childleft = parentleft + (parentright - parentleft - width) / 2 +
lp.leftmargin - lp.rightmargin;
break;
case gravity.right:
if (!forceleftgravity) {
childleft = parentright - width - lp.rightmargin;
break;
}
case gravity.left:
default:
childleft = parentleft + lp.leftmargin;
}
switch (verticalgravity) {
case gravity.top:
childtop = parenttop + lp.topmargin;
break;
case gravity.center_vertical:
childtop = parenttop + (parentbottom - parenttop - height) / 2 +
lp.topmargin - lp.bottommargin;
break;
case gravity.bottom:
childtop = parentbottom - height - lp.bottommargin;
break;
default:
childtop = parenttop + lp.topmargin;
}
child.layout(childleft, childtop, childleft + width, childtop + height);
}
}
}
喎?>
android中gravity什么意思,详解介绍android:layout_gravity 和 android:gravity 之间的区别相关推荐
- android studio parcelable,Android中Parcelable的使用详解
Parcelable与Serializable Serializable是Java为我们提供的一个标准化的序列化接口. Parcelable是Android为我们提供的序列化的接口. 对比: 1.Pa ...
- Android中的四大组件详解
Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity.Service.BroadcastReceiver.Conte ...
- Android中的广播Broadcast详解
今天来看一下Android中的广播机制,我们知道广播Broadcast是Android中的四大组件之一,可见他的重要性了,当然它的用途也很大的,比如一些系统的广播:电量低.开机.锁屏等一些操作都会发送 ...
- RxJava操作符在android中的使用场景详解(一)
转载请注明出处:http://www.wangxinarhat.com/2016/04/19/2016-04-19-rxjava-android-operate1/ 最近学习了RxJava在andro ...
- Android中LayoutParams类精炼详解
一.前期基础知识储备 首先看几个使用LayoutParams的实例: 1.<Android开发艺术探索>第8章,Java代码中动态设置按钮时 通过LayoutParams参数设置按钮位置x ...
- Android中R.java文件详解
R.java文件有两种,两种文件作用一样都是获取资源的引用,区别在于一个存放着我们写的项目中资源的引用,另一个存放着系统定义好的一些资源 1.1 项目的R.java文件 先说第一种是项目编译出来的R. ...
- Android中图片压缩方案详解
如感觉排版不舒服,可移步至此处查看 图片的展示可以说在我们任何一个应用中都避免不了,可是大量的图片就会出现很多的问题,比如加载大图片或者多图时的OOM问题,可以移步到Android高效加载大图.多图避 ...
- Android中AIDL的使用详解
Git: https://github.com/whtchl/AidlTemplate AIDL用来做什么 AIDL是Android中IPC(Inter-Process Communication)方 ...
- Android 中ContentProvider和Uri详解
一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给 ...
最新文章
- HTTP POST慢速DOS攻击初探
- MYSQL max_user_connections back_log max_connections参数和Max_used_connections
- 一个想法:走向“纳什均衡”是普遍存在的大趋势
- includes(), startsWith(), endsWith()
- [18/11/23]面向对象和面向过程
- Java PreparedStatement IN子句替代
- PowerShell批量配置VM端点
- 纪念王盘声逝世一周年王派演唱会成功举行
- P1322 logo语言
- JAVA_判断日期是否为工作日(排除节假日和调整周末上班)
- C++ sting字符串函数详解
- debug——程序停止正常工作
- TypeScript 使用 infer 实现类型推断
- 计科四班助教二月底至五月中旬点评与反馈
- IDEA无法启动:error launching idea (Failed to create JVM )
- 利用Django创建简单app
- 嵌入式软件工程师自学之路
- 通信天线建模与MATLAB仿真分析,通信天线建模与MATLAB仿真分析代码
- java写 狐狸找兔子_狐狸找兔 算法分析
- python3.6.6对应pydev_python之pydev安装
热门文章
- 【Webpack】1256- 硬核解析 Webpack 事件流核心!
- 【深度学习机器翻译】GNMT:Google 的的神经机器翻译系统
- linux dev sda 不存在,我查看linux分区情况为什么不是dev/hda而是dev/sda阿
- 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (中)
- [每周一读]——不让时间偷走你的成功
- Python基础知识点
- c语言程序设计实验与习题指导 第2版,C语言程序设计实验与习题指导(第2版)参考答案.doc...
- 南下打工潮正在远去!去年千万人返乡,农业的大转折正在到来
- 计算机在英语写作中应用,信息化背景下计算机反馈技术在英语写作中应用.doc...
- php只获取年月日,php怎么实现date只显示年月日