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 之间的区别相关推荐

  1. android studio parcelable,Android中Parcelable的使用详解

    Parcelable与Serializable Serializable是Java为我们提供的一个标准化的序列化接口. Parcelable是Android为我们提供的序列化的接口. 对比: 1.Pa ...

  2. Android中的四大组件详解

    Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity.Service.BroadcastReceiver.Conte ...

  3. Android中的广播Broadcast详解

    今天来看一下Android中的广播机制,我们知道广播Broadcast是Android中的四大组件之一,可见他的重要性了,当然它的用途也很大的,比如一些系统的广播:电量低.开机.锁屏等一些操作都会发送 ...

  4. RxJava操作符在android中的使用场景详解(一)

    转载请注明出处:http://www.wangxinarhat.com/2016/04/19/2016-04-19-rxjava-android-operate1/ 最近学习了RxJava在andro ...

  5. Android中LayoutParams类精炼详解

    一.前期基础知识储备 首先看几个使用LayoutParams的实例: 1.<Android开发艺术探索>第8章,Java代码中动态设置按钮时 通过LayoutParams参数设置按钮位置x ...

  6. Android中R.java文件详解

    R.java文件有两种,两种文件作用一样都是获取资源的引用,区别在于一个存放着我们写的项目中资源的引用,另一个存放着系统定义好的一些资源 1.1 项目的R.java文件 先说第一种是项目编译出来的R. ...

  7. Android中图片压缩方案详解

    如感觉排版不舒服,可移步至此处查看 图片的展示可以说在我们任何一个应用中都避免不了,可是大量的图片就会出现很多的问题,比如加载大图片或者多图时的OOM问题,可以移步到Android高效加载大图.多图避 ...

  8. Android中AIDL的使用详解

    Git: https://github.com/whtchl/AidlTemplate AIDL用来做什么 AIDL是Android中IPC(Inter-Process Communication)方 ...

  9. Android 中ContentProvider和Uri详解

    一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给 ...

最新文章

  1. HTTP POST慢速DOS攻击初探
  2. MYSQL max_user_connections back_log max_connections参数和Max_used_connections
  3. 一个想法:走向“纳什均衡”是普遍存在的大趋势
  4. includes(), startsWith(), endsWith()
  5. [18/11/23]面向对象和面向过程
  6. Java PreparedStatement IN子句替代
  7. PowerShell批量配置VM端点
  8. 纪念王盘声逝世一周年王派演唱会成功举行
  9. P1322 logo语言
  10. JAVA_判断日期是否为工作日(排除节假日和调整周末上班)
  11. C++ sting字符串函数详解
  12. debug——程序停止正常工作
  13. TypeScript 使用 infer 实现类型推断
  14. 计科四班助教二月底至五月中旬点评与反馈
  15. IDEA无法启动:error launching idea (Failed to create JVM )
  16. 利用Django创建简单app
  17. 嵌入式软件工程师自学之路
  18. 通信天线建模与MATLAB仿真分析,通信天线建模与MATLAB仿真分析代码
  19. java写 狐狸找兔子_狐狸找兔 算法分析
  20. python3.6.6对应pydev_python之pydev安装

热门文章

  1. 【Webpack】1256- 硬核解析 Webpack 事件流核心!
  2. 【深度学习机器翻译】GNMT:Google 的的神经机器翻译系统
  3. linux dev sda 不存在,我查看linux分区情况为什么不是dev/hda而是dev/sda阿
  4. 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (中)
  5. [每周一读]——不让时间偷走你的成功
  6. Python基础知识点
  7. c语言程序设计实验与习题指导 第2版,C语言程序设计实验与习题指导(第2版)参考答案.doc...
  8. 南下打工潮正在远去!去年千万人返乡,农业的大转折正在到来
  9. 计算机在英语写作中应用,信息化背景下计算机反馈技术在英语写作中应用.doc...
  10. php只获取年月日,php怎么实现date只显示年月日