- 浏览: 638133 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
luo_ganlin:
别的不多说,点个赞!
关于Android隐式启动Activity -
IWSo:
谢楼主!研究了好久,原来是这样!
android中如何让LinearLayout实现点击时背景图片切换 -
fantao005x:
粘帖的不错
android中如何让listview的内容全部显示出来 -
learner576539763:
Android_gqs 写道请问博主,Viewstub 可实现 ...
android中ViewStub使用 -
goontosoon:
抄的什么啊,狗屁不通
对ContentProvider中getType(Uri uri)
android:layout_weight详细分析介绍: 布局文件是: 出现这样的结局是什么意思呢?下面是详细解释: linearLayout中包含有weight的child时,linearLayout会measure两次: 实际上上面做的解释主要是对fill_parent和wrap_content做的解释,我们可以参考下面的2篇博文知道,上面的解释是存在一定的问题的。 一般来说,我们使用layout_weight,我们可能会使用在各个控件或者布局(像LinearLayout),应用最广泛的就是DV6300-T的主界面的布局,全部用的是layout_weight来控制的,这样可以更好的适应不同的分辨率。 所以我们经常用layout_weight来设置布局,一般是设置不同的LinearLayout为不同的layout_weight来完成基本布局,还可以利用LinearLayout来占据空间都是没有任何显示,这样的就是完全实现比重布局的LinearLayout,最后在各个LinearLayout里面又实现多个控件的layout_weight控制,同样也可以使用只占控件无显示的控件来达到分配布局的效果,DV6300-T就是明显例子。 还需要注意的就是LinearLayout的orientation如果没有设置,那么默认的就是horizontal水平方向。 按比例显示LinearLayout内各个子控件,需设置android:layout_width="0dp", 如果为竖直方向的设置android:layout_height="0dp"。 在这种情况下某子个控件占用LinearLayout的比例为:本控件weight值 / LinearLayout内所有控件的weight值的和。 一般我们控制比重都是设置对应方向的高或宽为0dp来实现我们想的比重控制,而很少用fill_parent或wrap_content,不过我们来理解这2种设置的区别。 还有一句话需要理解就是: 权重(layout_weight)最小,所以它占用的布局优先级就越高。 还需要注意的是保存一致性控制: 如果我们要控制显示比重,那么我们一般要求各个等级的元素的控制方式必须一致,比如多个button控件处于同一等级来控制比重布局,那么如果设置的是android:layout_width="0dp"这样的方式来控制,就必须把所有的等级控件都用android:layout_width="0dp"来控制,而不能有的用android:layout_width="0dp",而还有的用android:layout_width=" fill_parent ",这样就会出现混乱了。 下面还有一个例子: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2" android:background="#00AAC0" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2" android:background="#CCdd00" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:background="#0000FF" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2"> <Button android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="2" android:background="#FFAA00" /> <Button android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="2" android:background="#CCdd00" /> <Button android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" android:background="#0000FF" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2"> <Button android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="2" android:background="#00FF00" /> <Button android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="2" android:background="#CCdd00" /> <Button android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:background="#cc00FF" /> </LinearLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button1"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Button2"
/>
</LinearLayout>
出现的布局是:button1占了2/3,button2占了1/3。
但是如果将布局文件中的button的属性android:layout_width="fill_parent"改为android:layout_width="wrap_content"那么出现的结果为:button1占了1/3,button2占了2/3。
设屏幕宽度为X
第一次:button1的measuredWidth为X,button2也为X (因为用了weight,所以linearLayout每次measure child时不考虑前一个已经占用的大小),total_width为2X
第二次:计算delta=x-total_width=-x,然后会将button1的宽度设为
x+delta*1/3=0.66x, button2的宽度为 x+delta*2/3=0.33x
那我现在对这句话重新概括一下:“因为设置了button1的权重最小,所以它占用的布局优先级就越高”,也就是说layout_weight越小,布局优先级越高。也许在Android里面布局并没有优先级之说,我这里只是为了说明问题,自己定义的,所以朋友们不要拍砖。
那首先分析一下当layout_width属性设置为fill_parent的时候,即充满父布局,当然意思是这个控件要根据weight的设置尽可能的大,因此,依上例而论,button1的weight设为1,button2的weight设置为2.即button1的优先级最高,因此,要填充父布局就要button1先来填充,尽可能的大,那这个尽可能又是多少呢,这就要综合layout里其它控件的weight值了,然后做一下运算,button1占据2/3,button2占据1/3.你也可以把button2设置为一个非常大的数,比如2000,此时在Graphical Layout模式下可以看到button1填充满了整个宽度,而看不到button2的影子,事实上button2还是存在的,你把鼠标指向button1的后面就可以看到一个长长的竖条,那个就是button2,已经非常非常小了。因此,在layout_width设置为fill_parent的时候,weight所代表的是你的控件要优先尽可能的大。
接着是当layout_weight设置为wrap_content的时候,即适应内容的宽度,意思是这个控件要尽可能的小,只要能把内容显示出来就可以了,同样的,如果把button1和button2的layout_weight设置为wrap_content后,button1的weight为1,button2的weight为2.那么button1要优先尽可能的小,而button2也要尽可能的小,只是优先级不一样,因为设置了weight,所以这两个控件总的宽度要填满父布局的宽度,所以就又要计算每个控件所占据的大小,此时,button1的优先级较高,共有两份,一份1/3,一份2/3,button1要尽可能的小,那button1当然要选1/3,因此,我们看到的效果反而是button2占据的较大。这里要说的是如果把权值同样做如下设置:button1为1,button2为2000,那button1是不是就要占据1/2000的空间呢?这么理解就错了,刚才说了,要尽可能的小,但这个小是有一个限度的,那就是wrap_content,就是还要是内容完完整整的显示出来,同样的,尽可能的大也是有一个限度的,那就是父布局的宽度。因此,在layout_width设置为wrap_content的时候,weight所代表的是你的控件要优先尽可能的小。
所以,要对weight做了解,要深深的理解下面两句话:
在layout_width设置为fill_parent的时候,layout_weight所代表的是你的控件要优先尽可能的大,但这个大是有限度的,即fill_parent.
在layout_width设置为wrap_content的时候,layout_weight所代表的是你的控件要优先尽可能的小,但这个小是有限度的,即wrap_content.
layout_height 同 layout_width.
发表评论
-
EditText软键盘弹出问题解决
2013-02-26 23:10 1471当带有EditView的activity第一次进入时,第一 ... -
android中获取系统相关属性adb
2012-11-15 14:41 22021.查看系统相关属性可以通过: adb shell ... -
Android使用Intent传递复杂参数及复杂参数列表
2012-11-05 17:29 1640刚开始一直纠结于Intent只能put像int, ... -
解决P6200/P6800扩展卡第三方软件不可写的BUG
2012-11-05 17:01 1037从XDA看来的步骤:1. Using a root-e ... -
android 中跟actionbar相关的属性
2012-10-25 17:07 2486android:uiOptions 这个属性用于设置A ... -
source insight使用快捷键
2012-10-25 10:59 1562F5指定行号,实现行跳转,在遇到编译错误的时候,能特 ... -
android中推出应用比较有效率的方法
2012-10-11 16:57 1168添加一个全局变量作为程序退出的标记(boolean类型) ... -
declare-styleable的使用
2012-10-09 13:59 1182declare-styleable的使用 decl ... -
android程序安全的建议
2012-09-29 14:58 5321如果保证自己的 ... -
Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用
2012-09-29 14:45 1082从 Java 5 开始,Java 提供了自己的线程池。线 ... -
android应用检测更新代码
2012-09-24 17:40 1857JAVA代码: UpdateManager.java ... -
adb命令详解
2012-09-19 15:04 2896Android adb的常用命令略解 Androi ... -
android中屏蔽其它系统按钮的dialog
2012-09-18 10:13 1657public class MyProgress ... -
如何给Scrollview里内容截屏并生成bitmap,注意:Scrollview里面内容较多有滚动了
2012-09-18 10:07 1650使用for循环递归累加其内部的子控件的高度: p ... -
wakelock的使用
2012-09-17 11:44 10088PowerManager.WakerLock是我分析St ... -
启动另外一个apk
2012-09-14 13:16 907这篇博文主要是获取其他apk程序的启动的主intent, ... -
android中全屏的方法
2012-09-14 13:04 9741.直接代码编写 @Override ... -
android:installLocation简析
2012-09-12 15:25 1124在Froyo(android 2.2,API Le ... -
外部apk启动启动另外一个apk
2012-09-06 17:54 1058public class TestingBroadc ... -
listview如何实现圆角
2012-09-05 17:32 1944首先呢,我们还是看几个示图:(这是360推出的一款天气预 ...
相关推荐
在Android开发中,`weight`属性是LinearLayout布局中的一个关键特性,它允许我们在不同尺寸的屏幕上灵活地调整组件的大小,以实现响应式设计。在本文中,我们将深入探讨`weight`属性的工作原理以及如何有效地使用它...
在Android开发中,`weight`属性是LinearLayout布局管理器中的一个重要概念,用于实现视图组件的权重分配,尤其是在处理屏幕尺寸适配时显得尤为重要。`weight`属性是Android为了解决在不同分辨率和屏幕尺寸设备上保持...
本文就介绍了4中Android屏幕自适应解决方案。 一、细说layout_weight 目前最为推荐的Android多屏幕自适应解决方案。 该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中。其值越小,则对应的...
在Android移动开发中,"Weight"一词通常与布局管理器相关,特别是LinearLayout中的`layout_weight`属性。这个属性在创建动态、响应式界面时非常关键,因为它允许开发者分配视图组件之间的空间比例,而不仅仅是固定...
-<LinearLayout android:background="@drawable/aaa" android:weightSum="1" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android=...
在Android应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在单个Activity中实现多个可交互的屏幕区域。Fragment的设计使得应用可以更好地适应不同的屏幕尺寸和配置,如手机和平板。本教程将深入讲解...
在Android开发中,`android:layout_weight`是一个非常重要的属性,尤其在布局管理器中,如LinearLayout。这个属性主要用于在有限的空间内分配组件的大小,根据权重比例来决定每个子视图占据的屏幕空间。本篇文章将...
在Android开发中,创建带有图标的按钮是一种常见的需求,这可以使用户界面更加直观且易于操作。传统的Button组件虽然可以直接设置背景图来实现图标与文字的结合,但有时我们需要更灵活的布局方式。本文将介绍一种...
在每个内部的水平布局中,按钮的布局权重(`android:layout_weight`)被用来确保它们能平均分配空间。例如,两个Button组件都设置了`android:layout_weight="1"`,意味着它们会占据相同的空间,无论它们的原始尺寸...
-<LinearLayout android:background="@drawable/aaa" android:weightSum="1" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android=...
在Android开发中,布局(Layout)是构建用户界面的核心组件,它定义了应用程序屏幕上元素的排列方式和相互关系。本文将深入探讨Android中的布局机制,尤其是`TableLayout`的使用和实现细节。 首先,Android提供了...
android:layout_weight="1" android:listSelector="@drawable/list_selector" android:divider="@color/divider_color" android:dividerHeight="1dp" android:cacheColorHint="#00000000" android:choiceMode=...
android:layout_weight="1" android:layout_height="wrap_content" /> ``` 接下来,我们需要处理后台任务来更新进度条。在Android中,`AsyncTask` 是一个方便的异步处理工具,用于在后台执行耗时操作,并且可以...
在Android应用开发中,布局(Layout)是构建用户界面的核心元素。...通过`android:weightSum`属性定义总权重,而子视图的`android:layout_weight`属性则分配每个子视图的权重,权重高的子视图占据的空
总结,LinearLayout的weight属性是Android开发中实现动态布局的重要工具,它可以帮助开发者轻松应对不同设备尺寸的挑战,创建出适应性强、用户体验良好的应用程序界面。正确理解和使用weight属性,是提升Android应用...
android:layout_weight="1" /> ``` 接下来,我们来看一下 Fragment 的布局文件。我们定义了两个 Fragment:OneFragment 和 TwoFragment。每个 Fragment 都有自己的布局文件: ```xml <!-- OneFragment --> ...
在Android应用开发中,ListView是显示大量数据列表的常用组件,而实现ListView的左右联动功能可以为用户带来更丰富的交互体验。左右联动通常指的是当用户在ListView中的某一项上进行操作时,右侧或其他相关组件会...
`LinearLayout`是Android中最基本也是最常用的布局之一,它可以设置为垂直布局(`android:orientation="vertical"`)或水平布局(`android:orientation="horizontal"`)。通过`android:gravity`属性,可以控制子控件...
android:layout_weight="1" android:hint="请输入密码" android:inputType="textPassword" /> android:id="@+id/cb_show_password" android:layout_width="wrap_content" android:layout_height="wrap_...