1.1 合用weightSum属性和layout_weight属性

《打造高质量Android应用:Android开发必知的50个诀窍》第1章活用布局,本章将介绍Android布局相关的一些窍门和建议。通过本章,读者不仅可以学习如何从零开始创建特定类型的布局,还可以学到如何改进和优化现有布局。本节为大家介绍合用weightSum属性和layout_weight属性。

AD:2014WOT全球软件技术峰会北京站 课程视频发布

第1章 活用布局

本章将介绍Android布局相关的一些窍门和建议。通过本章,读者不仅可以学习如何从零开始创建特定类型的布局,还可以学到如何改进和优化现有布局。

Hack 1 使用weight属性实现视图的居中显示

Android v1.6+

在给开发者做演讲时,当我解释如何通过XML文件创建视图的时候,一个开发者问道:“如果我想将按钮居中显示,并且占据其父视图宽度的一半,应该怎么做呢?”起初,我并没有完全理解他的意思,后来他把想要实现的功能画在了黑板上,我才恍然大悟。他想实现的功能如图1-1和图1-2所示。

看起来很简单是吗?现在开始,请读者用5分钟时间实现这个功能。在这个Hack里,我们分析如何结合LinearLayout的android:weightSum属性和LinearLayout的子视图的android: layout_weight属性来解决这个问题。这听起来似乎很简单,不过我经常在面试中问到这个问题,很少有面试者知道最佳答案。

1.1 合用weightSum属性和layout_weight属性

不同Android设备的尺寸往往是不同的。作为开发者,我们需要创建适用于不同尺寸屏幕的XML文件。硬编码是不可取的,因此需要其他方法来组织视图。

本节分析如何合用layout_weight和weightSum这两个属性来填充布局内部的任意剩余空间。android:weightSum(见1.3节)的开发文档里的一段描述与我们现在想要实现的功能类似,文档内容如下:

“定义weight总和的最大值。如果未指定该值,以所有子视图的layout_weight属性的累加值作为总和的最大值。一个典型的案例是:通过指定子视图的layout_weight属性为0.5,并设置LinearLayout的weightSum属性为1.0,实现子视图占据可用宽度的50%。”

设想一个场景:我们要在盒子里放置其他物体。盒子可用空间的比例就是weightSum,盒子中每个物体可用空间的比例就是layout_weight。例如,盒子的WeightSum是1,我们需要往盒子里放置两个物体:物体A和物体B。物体A的layout_weight为0.25,物体B的layout_weight为0.75。那么,物体A可以占据盒子25%的空间,而物体B可以占据剩下的75%的空间。

本章开头所讨论问题的解决方案是与之类似的。我们为父视图指定一个weightSum,然后指定Button的android:layout_weight属性为weightSum的一半。XML文件的源码如下所示:

在手校付inearLayout的android:weightSum属性值为1,表示其内部所有子视图的weight比例总和是1。LinearLayout只有唯一一个子视图:Button控件。在酥校付˙utton的android:layout_width属性值为0dp,因此需要根据android:weight-Sum属性决定Button的width。在讨校付˙utton的android: layout_weight属性值为0.5,最终Button将占据50%的可用空间。

接下来以宽为200dp,android:weightSum属性值为1的Linear-Layout为例分析上述过程。计算Button宽度的公式如下:

因为指定Button的宽度为0dp,Button的weight为0.5,sum(weight)等于1,所以结果如下:

时间: 2024-10-11 00:51:46

1.1 合用weightSum属性和layout_weight属性的相关文章

50一个Android开发技巧(01 利用好layout_weight属性)

问题:如何将一个Button放置在布局的中间,并设置其宽度parent的50%? 分析:问题想要达到的效果应该是这样: (原文地址:http://blog.csdn.net/vector_yi/article/details/24397733) 这看起来不难,但非常多开发人员并不知道达到这样效果的最佳方法. 解决:在此我们将weightSum属性与layout_weight属性一起利用. <LinearLayout xmlns:android = "http://schemas.andro

weightSum和layout_weight属性合用

讲解一:weightSum和layout_weight属性合用 android:weightSum属性:定义weight总和的最大值.如果为指定该值,所有子视图的layout_weight属性的累加值作为总和的最大值.例如,通过指定子视图的layout_weight属性为0.5,并设置LinearLayout的weight属性为1.0,实现子视图占据可用宽度的50%: layout_weight属性:子视图的控件比例.就像我们在盒子放置其他物体,盒子可用空间的比例就是weightSum,盒子每个

日积月累:weightSum和layout_weight属性合用

解说一:weightSum和layout_weight属性合用 android:weightSum属性:定义weight总和的最大值. 假设为指定该值,全部子视图的layout_weight属性的累加值作为总和的最大值.比如.通过指定子视图的layout_weight属性为0.5.并设置LinearLayout的weight属性为1.0,实现子视图占领可用宽度的50%: layout_weight属性:子视图的控件比例.就像我们在盒子放置其它物体,盒子可用空间的比例就是weightSum,盒子每

Android UI: LinearLayout中layout_weight 属性的使用规则

首先来查看android sdk文档,有这么一段话 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 is should occupy on the sc

android:layout_weight属性的使用方法总结

原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6282826.html android:layout_weight属性可以和其他属性配合使用,产生多种效果,但如果我们不清楚各种配合的使用,也容易产生一些 意想不到的结果,今天我们就认真的总结一下android:layout_weight属性的各种用法和产生的效果,方便今后直接拿来使用. 首先声明一句,我们一般只在LinearLayout中使用该属性,以下各种情况都是在LinearLayout中产

Android知识点剖析系列:深入了解layout_weight属性

摘录自:http://www.cnblogs.com/net168/p/4227144.html 前言 Android中layout_weight这个属性对于经常捣鼓UI的我们来说,肯定不会陌生.但是我们在真正使用这个属性时,经常会出现一些莫名奇妙的布局效果:如果仅仅知其然而不知其所以然,一些意外的布局效果一定让我们颇为头疼.在本文中,将对layout_weight这个属性详细剖析. 正文 从代码讲起: <LinearLayout xmlns:android="http://schemas

Android中设置半个屏幕大小且居中的按钮布局 (layout_weight属性)

先看如下布局 : 上图中,按钮的大小为屏幕的一半,然后居中显示在布局中央,每个人心中都有自己的答案,看看我的方法吧,布局布局xml如下 : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_layout&

ListView 性能优化------使用ViewHolder,修改layout_weight属性为“match_parent”

转载自:http://blog.csdn.net/pkxiuluo01/article/details/7380860 Adapter是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.如果列表中有很多的项时会占用极大的系统资源,所以我们需要优化Adapter 1.convertView的使用 [java] view plaincopy Java代码 public View getView(int position, 

Android UI之android:layout_weight属性以及控件的比例控制

这两天在做一个Android界面的时候采用了linearlayout线性布局,并在其中放置了textview控件,设置android:layout_width属性为wrap_content时,eclipse提示说这里使用0dp取代wrap_content能获得更好的体验,顿时产生了好奇,为什么使用0dp会更好?于是探究了一番,网上已有相关的文章,学习之后作了一个总结. 首先解释一下Android:layout_weight属性的作用,其实简单理解就是用来分配空间大小,至于怎么分配,分配的是哪些空