`
sinye
  • 浏览: 218921 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android layout_weight讲解

阅读更多

在网上看了一些对Layout_weight的讲解,有些说的比较片面,只列举了一种情况,然后自己通过实验和一些比较好的文章总结了一下,特此记录下来,以备以后所用。Layout_weight是线性布局,也就是LinearLayout里面用到的,下面通过实验来看这个Layout_weight的特性。

1.当控件的属性android:layout_width="fill_parent"时,布局文件如下:

<?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的Layout_weight=1,Buttong2的Layout_weight=2,运行效果为:


我们看到,Button1占了2/3,Button2占了1/3。如果此时把button2的weight设置成2000,不是说Button2就消失了,而是Button1的宽度几乎占满了屏幕宽度,而屏幕最后一丝细条则是留给Button2的,已近非常小了,没有显示出来。截图如下:



 

 得出结论在layout_width设置为fill_parent的时候,layout_weight代表的是你的控件要优先尽可能的大,但尽可能大是有限度的,即fill_parent.

 

2.当控件的属性android:layout_width="wrap_content"时,布局文件如下:

<?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="wrap_content"
		android:layout_height="wrap_content" android:layout_weight="1"
		android:text="Button1" />
	<Button android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:layout_weight="2"
		android:text="Button2" />
</LinearLayout>

 同样,Button1的weight设置为1,Button2的weight设置为2,但是效果与fill_parent的效果截然相反。运行效果如下:


这时,和fill_parent正好相反,Button1的宽度占据了屏幕宽度的1/3,而Button2的宽度占据了屏幕的2/3,如果此时把Button1的weight设置为2000,按照之前理解,Button1应该小的几乎在屏幕上看不到,但是错了,实验告诉我们,当Button1的weight非常小时,也要"wrap_content",也就是要保证Button1至少能够显示。以下是Button1设置weight为2000时的运行截图:


我们看到,Button1已经足够小,但是要保证他能显示出来,因此得出结论:

在layout_width设置为wrap_content的时候,layout_weight代表的是你的控件要优先尽可能的小,但这个小是有限度的,即wrap_content.

当了解这些后,我们再设计程序时,为了能够自适应屏幕,不想给控件一个指定的宽度和高度,就可以使用这个weight属性来让它按自己比例来划分屏幕高度或者宽度了。

  • 大小: 3 KB
  • 大小: 2.2 KB
  • 大小: 3.1 KB
  • 大小: 3 KB
8
0
分享到:
评论
4 楼 jbas 2013-09-07  
非常不错,谢谢
3 楼 itstarting 2011-10-10  
谢谢,第一次开发android,布局方面得益于此。
2 楼 okzzh 2011-09-23  
liuwanwei 写道
博主写的很用心,谢谢。
有个地方可能疏忽了,我用尺子量了下第三张图:
button1宽度是125像素。
button2宽度是180像素。
button1:button2 不等于 1 : 2
论据不对,下面的结论就不一定正确了。



貌似1:2的是按钮的留白
1 楼 liuwanwei 2011-06-30  
博主写的很用心,谢谢。
有个地方可能疏忽了,我用尺子量了下第三张图:
button1宽度是125像素。
button2宽度是180像素。
button1:button2 不等于 1 : 2
论据不对,下面的结论就不一定正确了。

相关推荐

    Layout_table android网格布局

    - **权重分配**:在TableRow中,可以使用`android:layout_weight`属性为控件分配权重,决定控件占据的列宽比例。 4. **Spanned Cells(跨列):** - 通过设置`android:layout_span`属性,可以让一个控件跨越多列...

    Android 线性布局 实例

    1. `android:layout_width`和`android:layout_height`:同样用于子视图,但可以结合`android:layout_weight`使用,以实现按比例分配空间。 2. `android:layout_weight`:为子视图分配额外的空间,根据权重比例分配。...

    Android学习指南之Layout 布局--千锋培训

    android:layout_weight="1" android:text="Button 2"/&gt; android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="Button 3"/&gt; ``` 在这个例子中,...

    android屏幕自适应android属性归类.pdf

    如果希望TextView靠右,可以给ImageView添加`layout_weight`属性,然后在TextView中设置`android:gravity="right"`,使其内容自动靠右显示。 Android提供了多种布局属性,可以控制视图在屏幕上的位置和对齐方式: ...

    Android基础教程(二)之五大布局对象

    它可以自动调整视图之间的间距,并且可以指定权重(`android:layout_weight`)来控制子视图如何分配可用空间。 **代码示例:** ```xml xmlns:android="http://schemas.android.com/apk/res/android" android:...

    Android TabHost组件使用方法详解

    android:layout_weight="1" /&gt; ``` TabWidget是显示标签的地方,而FrameLayout用于填充每个标签页对应的内容。`layout_weight=1`设置使得内容区域占据剩余空间,确保了内容区域在屏幕上的适配。 接着,我们来...

    Android 方形layout界面

    android:layout_weight="1" android:layout_height="0dp" android:adjustViewBounds="true" android:scaleType="centerCrop" /&gt; ``` 3. **填充数据** 在代码中,我们需要动态地向`TableLayout`中添加`Table...

    android知识类讲解

    android:layout_weight="1" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:paddingLeft="6dip" android:gravity="center_vertical" android:orientation="horizontal"/...

    Android代码(相对布局).zip

    - 使用`android:layout_weight`属性实现弹性布局效果,让视图根据需要自动调整大小。 - 使用`&lt;merge&gt;`标签减少布局层次,优化性能。 7. **总结**: "Android代码(相对布局).zip"中的"Pro07(相对布局)"项目...

    Android对话框(Dialog)实例

    android:layout_weight="1" android:layout_height="wrap_content" android:text="取消" /&gt; android:id="@+id/btnDialogOk" android:layout_width="0dp" android:layout_weight="1" android:layout_height...

    android 加载本地联系人实现方法

    android:layout_weight="1.0" android:cacheColorHint="#00000000" android:divider="#00000000" android:dividerHeight="0.1px" android:fadingEdge="none" android:footerDividersEnabled="false" android:...

    Android应用开发-用户注册界面开发.pptx

    android:layout_weight="2" android:text="账号:" android:textColor="@color/white" /&gt; android:id="@+id/editText1" android:layout_width="0.0dp" android:layout_weight="8" android:layout_height=...

    android Activity布局初步(一)- 线性、表格布局

    在TableRow中,可以通过`android:layout_span`属性让一个单元格跨越多个列。此外,TableLayout还支持`android:shrinkColumns`和`android:stretchColumns`属性,可以控制哪些列在空间不足时收缩,哪些列在有额外空间...

    android 自定义软键盘

    android:layout_weight="1"&gt; &lt;!-- 数字键和其他特殊键 --&gt; android:id="@+id/key_1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="1" /&gt; ...

    CommonTitleBar_historythr_machineugx_android_Android通用tiitlebar_

    android:layout_weight="1" android:text="Your App Name" android:gravity="center_vertical" android:textSize="20sp" android:textColor="@android:color/white" /&gt; &lt;!-- Add your custom buttons or ...

    Android开发登陆界面布局

    通过合理利用Android布局系统提供的特性,如`LinearLayout`的`layout_weight`,开发者可以创建既美观又功能强大的用户界面。在实践中,不断试验和调整布局参数,结合不同设备的测试,是达到理想效果的关键步骤。通过...

    android 评论页面listview实现

    android:layout_weight="1" android:orientation="vertical"&gt; android:id="@+id/username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/...

    Android中在xml中静态添加Fragment

    `android:layout_width`和`android:layout_height`通常设置为0dp,然后通过`android:layout_weight`分配空间。 3. **初始化Fragment**:虽然在XML中已声明了Fragment,但还需要在Activity的`onCreate()`方法中进行...

    自定义dialog弹出框

    android:layout_weight="1" android:text="取消" /&gt; android:id="@+id/button_ok" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="确定" /&gt; ...

    Android实现Windows风格的Dialog Demo.zip

    android:layout_weight="1"&gt; android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"&gt; &lt;!-- Add your content views here --...

Global site tag (gtag.js) - Google Analytics