Android Layout研究 <一> 基础知识

本文介绍了Android应用程序中的UI布局概念及其实现方式。包括布局文件的创建、布局与UI的关联,以及通过XML定义布局结构的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android平台下开发已经很久了,但一直专注于NDK层,对App层程序只是一知半解.  这次借项目需要大改UI的机会,系统学习一下UI方面的知识. 


0.背景知识:

布局(Layout)是一个Activity中用户界面的架构,它定义了布局结构且存储所有将要显示给用户的元素。也就是说,Layout存储了将要显示给用户的UI框架如何,每一部份是什么内容。

在onCreate()中调用setContentView()来定义UI。 它的作用是告诉系统,将依照哪个布局创建UI。



1. 布局的声明方法:

布局的声明方法有两种:

A: 在res/layout目录创建布局文件(layout xml).

B: 在程序中实例化布局元素。


在实际使用时,经常混合使用,在XML格式的布局文件中定义布局和元素及其属性。编程时根据需要修改布局中包含元素的状态和属性。


布局文件(Layout)的创建

先想以下几个问题:

Layout文件是谁建立的?由谁建立的,我们可以自己建立么?

setContentView(int layoutResID)参数为int型。这个int型数值如何与Layout文件(如:activity_app.xml)联系起来呢?


当建立一个工程时,Eclipse通常都已经建立了一个布局文件(Layout),在res/layout目录下,是个xml文件。

我们可以建立自己的布局(Layout)文件:

在Eclipse中,File->New ->file. 选择Parent Folder为layout. 输入文件名为:test.xml

这样,就建立了自己的Layout文件。


但这个Layout xml文件,如何和一个Int型数据联系起来呢? Eclipse自动帮我们做了这件事。

打开gen/packageName/R.java

class R 包含一个静态Class ---layout.  它有个静态类成员变量test. 与我们新建的Layout --test.xml对应。

(其实可以注意到,class R中,包括很多静态类,刚好与res中项目对应起来,向Res目录中添加任何资源,都会被R.java自动记录)

这个Int型数据----R.layout.test, 其实就是Layout文件test.xml编译后的对象,不光这个Layout文件,Layout中每个元素名,都对应一个class,在加载这个Layout文件时,就对这些元素实例化




2. 布局(Layout)文件和UI的关联

如前面所说,Layout文件(如main.xml)是通过setContentView(int layoutResID)来通知系统,采用这个Layout作为UI(即将显示的)。R.layout.test是布局资源文件test.xml编译后的对象,Eclipse插件会自动在R.java文件中创建这个引用。这个Layout文件和其中每个元素都被实例化。




3. 布局文件初体验

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#0099cc"
    >

     <TextView
                android:id="@+id/TextView_Sam"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="60dp"
                android:textStyle="bold"
                android:text="@string/hello"
            />
     
     <Button
                android:id="@+id/Button_Sam"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"

                android:textStyle="bold"
                android:text="@string/Button"
            />

</LinearLayout>


先简单看看,这个Layout xml文件中先定义了一个框架,这个框架是LinearLayout。 其中包含两个元素:一个TextView, 一个Button。他们各自定义了自己的属性。如长宽,内容,字体等。

这其中有一些特殊的写法如:

android:id="@+id/Button_Sam"

android:text="@string/Button"

请参见附1。




















附录1:

XML语法解析:

A:android:id="@+id/Button_Sam"

每个元素(View)都有一个ID作为它的唯一标识符。

字符串前的@符号表示XML解析器应该解析和扩展剩下的ID字符串,并把它作为ID资源。+符号表示这是一个新的资源名字,它必须被创建且加入到我们的资源(R.java文件,R是Resource)。Android框架提供一些其他的ID资源。当引用一个Android资源ID时,你不需要+符号,但是你必须添加android包名字空间,如下:android:id="@android:id/empty"


B:android:text="@string/Button"

@[package:]string/some_name 

引用/res/values/strings.xml 中的some_name的内容。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值