热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Android:Layout_weight的深刻理解

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Android:Layout_weight的深刻理解相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Android:Layout_weight的深刻理解相关的知识,希望对你有一定的参考价值。




近期写Demo。突然发现了Layout_weight这个属性。发现网上有非常多关于这个属性的有意思的讨论。但是找了好多资料都没有找到一个可以说的清楚的,于是自己结合网上资料研究了一下,最终迎刃而解。写出来和大家分享。


首先看一下Layout_weight属性的作用:它是用来分配属于空间的一个属性,你能够设置他的权重。

非常多人不知道剩余空间是个什么概念,以下我先来说说剩余空间。


看以下代码:

  1. xml version="1.0" encoding="utf-8"?

    >     

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     
  3.     android:orientation="vertical"     
  4.     android:layout_width="fill_parent"     
  5.     android:layout_height="fill_parent"     
  6.     >     
  7. <EditText     
  8.     android:layout_width="fill_parent"     
  9.     android:layout_height="wrap_content"     
  10.     android:gravity="left"     
  11.     android:text="one"/>     
  12. <EditText     
  13.     android:layout_width="fill_parent"     
  14.     android:layout_height="wrap_content"     
  15.     android:gravity="center"     
  16.     android:layout_weight="1.0"     
  17.     android:text="two"/>     
  18.     <EditText     
  19.     android:layout_width="fill_parent"     
  20.     android:layout_height="wrap_content"     
  21.     android:gravity="right"     
  22.     android:text="three"/>     
  23. LinearLayout>     


执行结果是:


技术分享


看上面代码:仅仅有Button2使用了Layout_weight属性,并赋值为了1,而Button1和Button3没有设置Layout_weight这个属性。依据API,可知,他们默认是0


以下我就来讲,Layout_weight这个属性的真正的意思:Android系统先依照你设置的3个Button高度Layout_height值wrap_content,给你分配好他们3个的高度,


然后会把剩下来的屏幕空间所有赋给Button2,由于仅仅有他的权重值是1,这也是为什么Button2占了那么大的一块空间。


有了以上的理解我们就能够对网上关于Layout_weight这个属性更让人费解的效果有一个清晰的认识了。


我们来看这段代码:

  1.  <?xml version="1.0" encoding="UTF-8">   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="wrap_content"   
  5.     android:orientation="horizontal" >   
  6.     <TextView   
  7.         android:background="#ff0000"   
  8.         android:layout_width="**"   
  9.         android:layout_height="wrap_content"   
  10.         android:text="1"   
  11.         android:textColor="@android:color/white"   
  12.         android:layout_weight="1"/>   
  13.     <TextView   
  14.         android:background="#cccccc"   
  15.         android:layout_width="**"   
  16.         android:layout_height="wrap_content"   
  17.         android:text="2"   
  18.         android:textColor="@android:color/black"   
  19.         android:layout_weight="2" />   
  20.      <TextView   
  21.         android:background="#ddaacc"   
  22.         android:layout_width="**"   
  23.         android:layout_height="wrap_content"   
  24.         android:text="3"   
  25.         android:textColor="@android:color/black"   
  26.         android:layout_weight="3" />   
  27. LinearLayout> 


三个文本框的都是 layout_技术分享" class="fit-image" src="https://img.php1.cn/3cd4a/1eebe/cd5/443b30bb45e66690.webp" >


依照上面的理解,系统先给3个TextView分配他们的宽度值wrap_content(宽度足以包括他们的内容1,2,3就可以),然后会把剩下来的屏幕空间依照1:2:3的比列分配给3个textview,所以就出现了上面的图像。


而当layout_技术分享" class="fit-image" src="https://img.php1.cn/3cd4a/1eebe/cd5/617c1173853af4b6.webp" >


你会发现1的权重小,反而分的多了,这是为什么呢???网上非常多人说是当layout_fill_parent"的原因造成的。按照上面理解我们来分析:


系统先给3个textview分配他们所要的宽度fill_parent,也就是说每一都是填满他的父控件,这里就死屏幕的宽度


那么这时候的剩余空间=1个parent_width-3个parent_技术分享" class="fit-image" src="https://img.php1.cn/3cd4a/1e618/c5a/d5d40da532c3a782.png" >


第三个直接不显示了,为什么呢?一起来按上面方法算一下吧:


系统先给3个textview分配他们所要的宽度fill_parent,也就是说每一都是填满他的父控件。这里就死屏幕的宽度


那么这时候的剩余空间=1个parent_width-3个parent_技术分享" src="http://img.blog.csdn.net/20160428160844923?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >










推荐阅读
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
author-avatar
jack2502937407
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有