Android layoutWeight解惑

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}"
    android:orientation="horizontal">
<!--
解惑:
第一种情况:控件宽度设置为wrap_content,比例分配为1:2:3,界面显示就是按照分配的比例进行显示的
第二种情况:控件宽度设置为match_parent,比例分配为1:2:2,界面显示效果为2:1:1
第三中情况:控件宽度设置为match_parent,比例分配为1:2:3,界面显示为2:1

原因是因为layout_weight计算的是当分配完控件的宽度后占剩余空间的比例,weight默认为0

计算公式为:
剩余空间=父控件宽度-所有控件宽度和
所占父控件空间=控件宽度+占剩余空间的比例*剩余空间

都拿第一个控件举例:
当设置为wrap_content,剩余空间=父控件宽度 - 3 * 0,所占父控件空间=0+1/6 * 父控件宽度=1/6*父控件宽度,剩余两个控件类似
当设置为match_parent时,剩余空间=父控件宽度-3*父控件宽度=-2父控件宽度,所占父控件空间=父控件宽度+1/5*(-2*父控件宽度)=3/5父控件宽度,类似的剩余两个分别占1/5
比例变为1:2:3时,第一个控件的所占空间=父控件宽度+1/6*(-2*父控件宽度)=2/3父控件宽度,第二个为1/3父控件宽度,第三个为0,所以第三个控件就看不到了

 -->
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />
       <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        />
         <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        />

</LinearLayout>

  

时间: 2024-10-27 03:52:48

Android layoutWeight解惑的相关文章

Android(java)学习笔记162:Android开发基本知识

ADT Android develop tools,安卓开发工具(eclipse的插件) 最新版本23.xxx 不好用.默认强制使用一些新的控件. SDK standard develop kits 标准开发工具包 SDK的目录结构 add-ons 附加组件,放在一个额外的工具.google api,提供google地图的jar包 * build-tools 编译工具,谷歌sdk升级后采用的目录 * docs 文档目录.开发文档. * extras 附加工具 support 文件夹,提供向下兼容

HackOne

使用 weight 属性实现视图的居中显示 一.在开发中有时候会遇到将一个控件在父控件居中显示.但是如果你直接用margin_*来进行限制的话就可能造成对于不同的型号的手机又不同显示的格式. 所以就可以用到android:weightSum和android:layoutweight来解决这个问题. 官方API对android:weightSum的解释是: 定义weight总和的最大值.如果未指定该值,以所有子视图的layout_weight属性的累加值作为总和的最大值. 一个典型的案例是:通过制

JAVA学到什么程度才可以转战Android?【高手解惑】

如果有同学想要深入了解或是说有什么疑问的呢可以加***流487425429. 先简单的分两种情况:一.有编程基础,或者科班出身的,直接上吧.强烈推荐郭霖老师的<第一行代码-Android>二.没编程基础的,先入门java,如果天天都有比较多的空闲时间的话,这个入门时间要在2周完成,如果没有的话,1个月内完成吧,不要让拖延耽搁你的激情.如果你准备好了进军Android:不管你什么时候开始学习Android,请使用Android Studio,首现改主题,然后去网上搜一下常用的20个快捷键截图放在

Android LayoutInflater.inflate使用上的问题解惑

最近在在使用LayoutInflater.inflate方法时遇到了一些问题,以前没有仔细看过此类的使用方法,故将其记录下来,方便日后查阅. 相信大家都知道LayoutInflater.inflate是在android开发遇到的一些使用频率是非常高的方法,如果使用不好的,就会出现一些奇怪的问题. 一个例子如下: 1,一个主布局文件如下 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数(转)

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢?为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 public class FramentT

Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢? 为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 1 public class Frame

[活动已结束]《深入理解Android:Wi-Fi、NFC和GPS卷》CSDN社区活动

今天有一个CSDN社区活动,解答关于Android系统的学习.认识.开发等方面的问题,并就<深入理解Android:Wi-Fi.NFC和GPS卷>一书为大家答疑解惑,了解Android Framework的实现原理.活动链接:http://bbs.csdn.net/topics/390765275?page=1#post-397228045 此次活动已经完结,谢谢各位的支持.获奖的三位兄弟是: 以下欢迎大家踊跃提问,在本帖回复就可以,參与活动并提出问题就可以获得100可用分.在大家的积极參与下

微信公众平台开发教程新手解惑40则

[编者按]由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在北京举行,邀请了来自于一线的微信开发商技术负责人或资深工程师从企业应用开发高级篇.智能客服与LBS.微信支付.微信上的HTML5社交应用.微信小店开发等角度为与会者带来实战分享( 议程 ).目前报名处于优惠票价阶段,通过申请加入CSDN CTO俱乐部即可享受8折购票价格(票款中均含午餐),在8月1日前完成付款的同学还将免费获赠微信开发图书一本(两选一,活动现场发放).  值得一提的是,CSDN优秀博主.畅

Android:图解四种启动模式 及 实际应用场景解说

在一个项目中会包括着多个Activity,系统中使用任务栈来存储创建的Activity实例,任务栈是一种"后进先出"的栈结构.举个栗子,若我们多次启动同一个Activity.系统会创建多个实例依次放入任务栈中.当按back键返回时,每按一次,一个Activity出栈,直到栈空为止.当栈中无不论什么Activity.系统就会回收此任务栈. 上面这个样例中的Activity并没有设置启动模式,你会发现多次启动同一个Activity.而系统却创建了多个实例,白白浪费内存,这样的情况Andro