android+动态设置权重,Android自适应布局(关于权重weight的使用技巧!)
weight和weightSum
Layout Weight
LinearLayout also supports assigning a weight to individual children with the android:layout_weight attribute. This attribute assigns an “importance” value to a view in terms of how much space it should occupy on the screen. A larger weight value allows it to expand to fill any remaining space in the parent view. Child views can specify a weight value, and then any remaining space in the view group is assigned to children in the proportion of their declared weight. Default weight is zero.
大体意思就是,android:layout_weight 这个属性代表了一个“重要性”的值,这个值的大小代表了该控件能在屏幕中占据多大的空间。这个值越大,表明该控件可以在父控件中占据较多的“ 剩余 ”空间。默认的weight是0。
在这里,大家一定要注意“ 剩余 ”两个字!大家往往容易忽略这一点,导致出现了很多问题。举个例子:水平方向布局的父类有三个子类,父类总的宽度是100,子类的宽度分别是10,20,30。 那么 android:layout_weight 这个属性的目的,就是瓜分剩余的 100 - 10 - 20 - 30,也就是剩余的40的使用权。没错! 就是android:layout_weight 这个属性 仅仅决定 哪个子类能瓜分到更多的40的部分!
android:weightSum
Defines the maximum weight sum. If unspecified, the sum is computed by adding the layout_weight of all of the children.
这个就很好理解了,weightSum定义了weight 总和的最大值。如果 android:weightSum 没有定义,那么默认值就是通过各个子类的 layout_weight 累加得到。
例子:<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="1">
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/hello_world" />
内部的计算原理是:
Button的宽度 = Button 的 width + Button的weight * 父布局(LinearLayout)的宽度 / weightSum
上面的例子,也就是 Button的宽度 = 0 + 0.5 * LinearLayout的宽度 / 1 = 0.5 * LinearLayout的宽度
也就是Button的宽度将占屏幕的一半。
注意:
在布局文件中的控件,宽高设置成0、固定值、wrap和fill时使用”weight”属性来调整大小的效果是有区别的
当 宽高为固定值时肯定是不行的;
当 android:layout_width(height)=”match_parent”或者“fill_parent”的时候,如果设置了weight属性,那么根据它的weight值(可以理解为优先级)来占据空间,而且这个值是越小,占的空间越大,按且按且相反的大小比例分。
当 android:layout_width(height)=”wrap_parent”的时候,如果设置了weight属性,那么weight值变大占据空间就变大,但是不是按照比例变化,而且weight值达到一定程度控件占据的控件大小就不会在变化。
谷歌工程师推荐大家使用android:layout_width(height)=”0dp”,因为如果你去尝试看就会发现,只有宽或高设置成“0dp”时才是真正的按照“weight”的值按比例设置控件的大小。
关于weight
在相对布局中的控件是不能使用“weight”属性的,但是,在RelativeLayout标签中是可以有“weight”属性的,也就是说你可以用”weight”属性来控制这个相对布局在整个布局中的大小,却不能用”weight”属性来控制这个相对布局中控件的大小。
android+动态设置权重,Android自适应布局(关于权重weight的使用技巧!)相关推荐
- android 动态设置padding,Android动态设置控件大小以及设定margin以及padding值
http://www.aichengxu.com/Java/73893.htm Android动态设置控件大小以及设定margin以及padding值,有需要的朋友可以参考下. 一.概述 在andro ...
- android 高度上分权重,安卓自适应布局(关于权重weight的使用技巧!)
weight和weightSum Layout Weight LinearLayout also supports assigning a weight to individual children ...
- android 动态设置windowbackground,android – windowBackground不会随主题而改变
我的申请中有两个主题.我有一个蓝色背景的蓝色主题: @drawable/menu_hardkey_panel_actionbar @style/ButtonAppTheme @drawable/bgr ...
- android 动态设置margin,android 代码中设置margin
场景:Android怎么在java代码中设置margin Android如何在java代码中设置margin 原创帖,转发请注明出处:http://thierry-xing.iteye.com/blo ...
- android 动态设置margin,Android 动态设置padding跟margin的问题
最近要做到动态设置padding跟margin,设置它们四个参数都是int类型.比如这里设置了10,,可是这个数又是代表什么意思呢?一直很好奇它们的单位问题,所以这就造成了,在不同手机上的适配问题.有 ...
- android动态设置src,Android 代码里设置ImageView的src和background
设置ImageView的src: image.setImageDrawable(getResources().getDrawable(R.drawable.blackk)); String path= ...
- android textview layoutparams,Android动态设置布局的LayoutParams属性总遇到造型异常
Android动态设置布局的setLayoutParams()属性总遇到造型异常问题 android:id="@+id/introduce" android:layout_widt ...
- android 动态改变语言,android动态设置app当前运行语言的方法
android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言. package com.example.androidtest; import java.util.Locale ...
- Android 动态设置宽高
Android 动态设置宽高 val params: FrameLayout.LayoutParams = view?.layoutParams as FrameLayout.LayoutParams ...
最新文章
- Linux终端C语言实现图片拷贝
- Java Exception
- [NOIP2015]子串
- json数据解析_VBA 实践指南 -- Split函数解析Json数据
- Thymeleaf 学习笔记 (2)
- 赋值、浅拷贝、深拷贝
- 安卓和ios抓包神器
- Elasticsearch6 去重
- 简单了解各种序列化技术-JSON序列化框架
- vector容器中清空元素(但原来的元素还在)
- 前端学习(2452):封装数据接口
- C语言--《C专家编程》C语言申明的优先级规则
- 关于瑞昱8763bfr的学习总结(1)
- C/C++ typedef用法!
- 仿TT语音,语音游戏陪玩APP源码,社交属性强大
- 题目:P3717 [AHOI2017初中组]cover
- 湖南工业大学计算机学院有哪些社团,湖南工业大学学生社团联合会
- 2021物理化学实验2:分光光度法测溴酚蓝的电离平衡常数
- 图形虚拟化技术为每个英特尔®显卡家族提供支持
- 内核辅助函数系列 001 --- __ffs(unsigned long word):第一个非 0 位
热门文章
- 揭秘聚划算活动的营销技巧!!!
- 面试精讲(guigu)
- 创建多个wordpress_如何轻松创建多语言WordPress网站
- 做计算机视觉对电脑配置的要求,计算机视觉环境配置
- Spring Boot应用退出
- django迁移数据库乱了,彻底重新再来的步骤
- Framework定制系列(一)-----SystemUI NavigationBar导航栏上滑返回Launcher
- 文件头文件尾全面总结
- 建立远程服务器链接失败,无法建立与远程邮件服务器的 TLS 连接 - Exchange | Microsoft Docs...
- java一条System.out语句打印多个变量