LinearLayout中借助:weightSum和layout_weight布局

如图所示,为一个Activity的自定义标题,现在需要借助Linearlayout中的weightSum和layout_weight布局来实现:
LinearLayout中借助:weightSum和layout_weight布局_第1张图片

在开发中使用LinearLayout 进行View的布局时,要实现这样的布局有很多种布局方式,程序源码是使用硬编码的方式来做的,硬编码的弊端在于屏幕宽度发生变化的时候,布局就会发生变化。

借助于LinearLayout 特有的 android:layout_weight 和 android:weightSum 可以非常完美的完成这个任务。那么怎么理解这两个属性呢?

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

借助android:layout_weight 和android:weightSum 来实现上图中的布局:

以下是实现代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/titlebar_bj" android:orientation="horizontal" android:weightSum="6" >

    <!-- back button -->

    <Button  android:id="@+id/titlebar_backButton" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:background="@drawable/titlebar_back" />

    <!-- filename -->

    <TextView  android:id="@+id/titlebar_name" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="3dip" android:layout_marginRight="5dip" android:layout_weight="3" android:ellipsize="end" android:focusable="true" android:focusableInTouchMode="true" android:scrollHorizontally="true" android:singleLine="true" android:text="@string/titlebar_main_filenname" android:textColor="@color/black" android:textSize="18sp" />

    <!-- sign start -->

    <RelativeLayout  android:id="@+id/annotation_start" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:background="@drawable/titlebar_buttonbackground" >


        <ImageView  android:id="@+id/titlebar_annotation_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:background="@drawable/edit_n" android:contentDescription="@string/signstart" />

        <ImageView  android:id="@+id/titlebar_annotation_finish" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:background="@drawable/edit_p" android:contentDescription="@string/signfinish" android:visibility="gone" />
    </RelativeLayout>

    <!-- more -->

    <Button  android:id="@+id/titlebar_more" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:background="@drawable/titlebar_more" />

</LinearLayout>

android:weightSum=“6” 意思为:将整个屏幕宽度分为6份。weightSum定义weight总和的最大值。如果未指定该值,以所有子视图的layout_weight属性的累加值作为总和的最大值

android:layout_weight=“1” 意思为: 占据6份中的一份。此时:整个LinearLayout的android:layout_width 需要设置为“0dp”

当然,如果是vertical布局的话,将android:layout_height 设置为“0dp”

你可能感兴趣的:(LinearLayout,weight)