`
yidongkaifa
  • 浏览: 4059661 次
文章分类
社区版块
存档分类
最新评论

Android布局二_LinearLayout

 
阅读更多

LinearLayou(线性布局布局)

一些重要的属性:


一orientation(朝向) 该属性值有两种一种是垂直朝向(verticle),还有一个是水平朝向(horizontal)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:background="@drawable/blue"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- view1 goes on top -->
    <TextView
        android:background="@drawable/box"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/linear_layout_1_top"/>

    <!-- view2 goes in the middle -->
    <TextView
        android:background="@drawable/box"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/linear_layout_1_middle"/>

    <!-- view3 goes on the bottom -->
    <TextView
        android:background="@drawable/box"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/linear_layout_1_bottom"/>

</LinearLayout>

结果如下:


二layout_weight(权重):

看下面一个例子: 该布局填充整个屏幕,其中有三个字控件,分别占据头部,底部,中间

在上一篇博客中我们通过相对布局也可以实现(把高设置成0,height=0)

更多关于该属性的细节可以浏览http://hi.baidu.com/mendynew/item/39cd374192770bab60d7b915

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="@drawable/blue"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- view1 goes on top -->
    <TextView
        android:background="@drawable/box"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/linear_layout_3_top"/>

    <!-- view2 goes in the middle -->
    <TextView
        android:background="@drawable/box"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/linear_layout_3_middle"/>

    <!-- view3 goes on the bottom -->
    <TextView
        android:background="@drawable/box"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/linear_layout_3_bottom"/>

</LinearLayout>
运行结果:



下面一个例子,所有子空间的都是相同的宽度.也是通过该属性来实现的.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:background="@drawable/red"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <TextView
        android:background="@drawable/green"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <TextView
        android:background="@drawable/blue"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <TextView
        android:background="@drawable/yellow"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

</LinearLayout>


下面看一个简单表单的例子,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="@drawable/blue"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dip">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/linear_layout_5_instructions"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/editbox_background"/>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/linear_layout_5_cancel"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:text="@string/linear_layout_5_ok" />

    </LinearLayout>

</LinearLayout>


在上一篇博客中通过相对布局也能布局出这样的,但是从效率上说,相对布局要好很多,效率要高.从这个例子上看线性布局的层级要深.


weight属性还可以实现如下布局:


运行结果:


通过相对布局也是可以实现这样的布局,把button设置为android:layout_alignParentBottom ="true"


三gravity(重心)

下面来看一个例子:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="30dip" >

    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/blue"
        android:orientation="vertical"
        android:padding="30dip" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/box"
            android:text="@string/linear_layout_8_c" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/box"
            android:text="@string/linear_layout_8_b" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/box"
            android:text="@string/linear_layout_8_c" />
    </LinearLayout>

</FrameLayout>


Java代码:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(0, VERTICAL_ID, 0, R.string.linear_layout_8_vertical);
        menu.add(0, HORIZONTAL_ID, 0, R.string.linear_layout_8_horizontal);
        menu.add(0, TOP_ID, 0, R.string.linear_layout_8_top);
        menu.add(0, MIDDLE_ID, 0, R.string.linear_layout_8_middle);
        menu.add(0, BOTTOM_ID, 0, R.string.linear_layout_8_bottom);
        menu.add(0, LEFT_ID, 0, R.string.linear_layout_8_left);
        menu.add(0, CENTER_ID, 0, R.string.linear_layout_8_center);
        menu.add(0, RIGHT_ID, 0, R.string.linear_layout_8_right);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

        case VERTICAL_ID:
            mLinearLayout.setOrientation(LinearLayout.VERTICAL);
            return true;
        case HORIZONTAL_ID:
            mLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
            return true;

        case TOP_ID:
            mLinearLayout.setVerticalGravity(Gravity.TOP);
            return true;
        case MIDDLE_ID:
            mLinearLayout.setVerticalGravity(Gravity.CENTER_VERTICAL);
            return true;
        case BOTTOM_ID:
            mLinearLayout.setVerticalGravity(Gravity.BOTTOM);
            return true;

        case LEFT_ID:
            mLinearLayout.setHorizontalGravity(Gravity.LEFT);
            return true;
        case CENTER_ID:
            mLinearLayout.setHorizontalGravity(Gravity.CENTER_HORIZONTAL);
            return true;
        case RIGHT_ID:
            mLinearLayout.setHorizontalGravity(Gravity.RIGHT);
            return true;

        }
        return super.onOptionsItemSelected(item);
    }
以上设置的gravity是通过Java代码设置的,也可以通过xml配置



需要注意的是layout_gravity和gravity的区别,前者是该控件相对于父控件的重心(gravity),后者该控件的子空间的重心(gravity)




欢迎转载,转载请注明出处:http://blog.csdn.net/johnny901114/article/details/7866864






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics