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

android:layout_weight属性详解

    博客分类:
  • IOS
 
阅读更多

转自:http://blog.sina.com.cn/s/blog_7cd0c0a80100zmfe.html

 

在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示。android并没用提供table这样的控件,虽然有TableLayout,但是它并非是我们想象中的像html里面的table那么好用,我们常用ListView实现table的效果,但是列对齐确比较麻烦,现在用LinearLayout及属性android:layout_weight能很好地解决。下面我们共同体验下layout_weight这个属性。

  一、LinearLayout内的控件的layout_width设置为"wrap_content",请看一下xml配置:

 <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1"
     >
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="1"
          android:background="#aa0000"
          android:gravity="center"
          android:text="1"/>
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="2"
          android:background="#00aa00"
          android:gravity="center"
          android:text="1"/>
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="3"
          android:background="#0000aa"
          android:gravity="center"
          android:text="1"/>
  </LinearLayout>

 效果如下:

可以看到这三个TextView是按照1:2:3的比例进行显示的,这样看来似乎可以实现按照比例显示了,但是有个问题,如果TextView内的文本长度一同那么较长文本的TextView会宽度会有所增加,见下面配置及效果:

配置:

 <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1">
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="1"
          android:background="#aa0000"
          android:gravity="center"
          android:text="1111111111111111111111111111111111111111111"/>
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="2"
          android:background="#00aa00"
          android:gravity="center"
          android:text="2"/>
      <TextView
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:layout_weight="3"
          android:background="#0000aa"
          android:gravity="center"
          android:text="3"/>
  </LinearLayout>

效果:

这样看来我们所需要的按比例又无法实现了,经过满天地google终于找到了解决方案,就是设置layout_width设置为"wrap_content"。配置及效果见下:

 <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1">
      <TextView
          android:layout_width="0dp"
          android:layout_height="fill_parent"
          android:layout_weight="1"
          android:background="#aa0000"
          android:gravity="center"
          android:text="1111111111111111111111111111111111111111111"/>
      <TextView
          android:layout_width="0dp"
          android:layout_height="fill_parent"
          android:layout_weight="2"
          android:background="#00aa00"
          android:gravity="center"
          android:text="2"/>
      <TextView
          android:layout_width="0dp"
          android:layout_height="fill_parent"
          android:layout_weight="3"
          android:background="#0000aa"
          android:gravity="center"
          android:text="3"/>
  </LinearLayout>

效果:

这样终于达到我们的按比例显示的效果了,感觉很是奇怪,android开发框架的大佬们有时候设计确实有点匪夷所思。

  二、LinearLayout内的控件的layout_width设置为"fill_parent",请看一下xml配置:

 <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1">
      <TextView
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_weight="1"
          android:background="#aa0000"
          android:gravity="center"
          android:text="1"/>
      <TextView
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_weight="2"
          android:background="#00aa00"
          android:gravity="center"
          android:text="2"/>
  </LinearLayout>


效果如下:

奇怪吧,整个宽度平分3块,第一个TextView占了两块,这样看来weight值越小的优先级越大。只有两个TextView似乎看出些道理,那么让我们看看三个是什么效果:

<LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1">
      <TextView
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_weight="1"
          android:background="#aa0000"
          android:gravity="center"
          android:text="1"/>
      <TextView
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_weight="2"
          android:background="#00aa00"
          android:gravity="center"
          android:text="2"/>
      <TextView
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_weight="3"
          android:background="#0000aa"
          android:gravity="center"
          android:text="3"/>
  </LinearLayout>

效果:

什么意思?第三个TextView丢掉了,很是奇怪,让我们再试一个,把weight分别改为2,3,4的看看效果:

这个效果让人很困惑,我一直想寻求出一个确切的比例公式,但是至今未找到。有哪位大神能搞定的话忘不吝赐教。

虽然这个android:layout_weight属性很怪异,但幸运的是我们达到了目标:

  按比例显示LinearLayout内各个子控件,需设置android:layout_width="0dp",如果为竖直方向的设置android:layout_height="0dp"。在这种情况下某子个控件占用LinearLayout的比例为:本控件weight值 / LinearLayout内所有控件的weight值的和。

分享到:
评论

相关推荐

    Android中的android:layout_weight使用详解

    在Android开发中,`android:layout_weight`是一个关键属性,特别是在使用`LinearLayout`进行界面布局时。`layout_weight`用于指定一个子视图在父视图中的权重,它决定了控件如何分配额外的空间,尤其是在视图的尺寸...

    weight属性详解

    ### weight属性详解 #### 一、前言 在Android开发中,`LinearLayout`是一种非常常见的布局方式,它可以通过`android:orientation`属性设置为垂直或水平排列子元素。此外,`LinearLayout`支持通过`android:gravity`...

    Android Layout样式布局

    ### Android Layout样式布局详解 #### 一、概述 在Android应用开发中,界面设计是非常重要的一环,而界面设计的核心就是布局(Layout)。布局决定了应用界面的结构与外观,是用户体验好坏的重要因素之一。本文将...

    android布局属性详解

    ### Android布局属性详解 在Android应用开发中,布局是用户界面设计的核心部分,它决定了控件的排列方式和外观效果。本篇文章将详细介绍Android中常用的布局属性及其应用场景,帮助开发者更好地掌握布局技巧。 ###...

    Android_布局属性大(1).zip

    6. `android:layout_weight`:在LinearLayout中,此属性用于分配剩余空间。当所有视图的width或height设为"0dp"并赋予权重时,会按权重比例分配额外的空间。 7. `android:visibility`:控制视图的可见性,可以设置...

    Android 控件说明

    - `layout_weight`:用于确定视图在容器中的相对大小,特别是在`LinearLayout`中,当设置了`layout_weight`时,如果`layout_width`或`layout_height`设置为`match_parent`,则会根据权重分配空间。 - `layout_...

    LinearLayout的属性详解

    LinearLayout是Android开发中的基础布局组件,其主要通过orientation、layout_weight等属性来实现灵活的视图布局。理解并熟练运用这些属性,能够使你在开发过程中更高效地创建用户界面,满足各种设计需求。在实际...

    Android六大布局详解

    例如,如果设置了`android:layout_width="0dp"`,则可以通过`android:layout_weight`属性来分配宽度。 示例代码: ```xml &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:...

    Android TabHost组件使用方法详解

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

    android线性布局详解.doc

    在这种情况下,两个TextView都将根据它们的`android:layout_weight`属性进行空间分配,但由于它们的宽度都是`"wrap_content"`,`android:layout_weight`的设置在这里不会改变它们的宽度,除非改变宽度属性为`"fill_...

    android的布局及主要控件的属性

    例如,在一个水平布局中,如果有两个TextView,其中一个TextView设置了`android:layout_weight="1"`,另一个没有设置或设置为0,则第一个TextView将占据更多的空间。 - **android:singleLine**:设置为`true`时,...

    Android-Layouts

    `LinearLayout`支持权重属性`android:layout_weight`,该属性允许开发者根据权重比例分配剩余空间。当设置了权重后,`LinearLayout`会将剩余的空间按照各视图权重的比例进行分配。 - **示例**: ```xml xmlns:...

    Android布局详解

    ### Android布局详解 #### 一、概述 在Android应用程序开发中,布局是构建用户界面的基础。良好的布局设计能够显著提升用户体验。本文将详细介绍Android中的五种常见布局:FrameLayout(框架布局)、LinearLayout...

    android studio 基本控件

    - 例如,如果有三个 TextView 设置了 `android:layout_weight="1"`、`android:layout_weight="2"` 和 `android:layout_weight="3"`,则这三个 TextView 将按比例占据 LinearLayout 的宽度(或高度,取决于 ...

    Android 相对布局实例

    - `android:layout_weight`:当子视图需要按比例分配空间时,权重属性非常有用。它允许子视图占据剩余空间的一部分。 - `android:layout_margin`:用于设置视图与其他视图或边界之间的距离,有上、下、左、右四个...

    Android-ListView中嵌套(ListView)控件兼容问题

    android:layout_weight="5.5" android:id="@+id/statistics_forcast_numbers" android:gravity="center" android:text="12,15,2,4,6,9,14"/&gt; android:layout_width="wrap_content" android:layout_height=...

    Layout_table android网格布局

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

    认识Android布局文件

    【Android布局文件详解】 在Android应用开发中,界面设计是一个至关重要的环节,而XML格式的布局文件正是构建这些界面的核心工具。布局文件定义了应用程序界面的结构,包括它所包含的控件、控件间的相对位置以及...

Global site tag (gtag.js) - Google Analytics