Android Layout研究 <一> 基础知识
2014-09-24 11:27
302 查看
在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资
4000
源ID时,你不需要+符号,但是你必须添加android包名字空间,如下:android:id="@android:id/empty"。
B:android:text="@string/Button"
@[package:]string/some_name
引用/res/values/strings.xml 中的some_name的内容。
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资
4000
源ID时,你不需要+符号,但是你必须添加android包名字空间,如下:android:id="@android:id/empty"。
B:android:text="@string/Button"
@[package:]string/some_name
引用/res/values/strings.xml 中的some_name的内容。
相关文章推荐
- Android Activity学习 <一> Activity基础知识和生命周期
- ViewPager详解 <一> : 基础知识
- Android Layout研究 <三> View的布局方式及实例
- <Android 基础(三十四)> TabLayout 从头到脚
- SQL数据库基础知识-巩固篇<一>
- JavaScript中函数函数的定义与变量的声明<基础知识一>
- 黑马程序员 java概述与基础知识<一>
- Android Layout研究 <四> 实例
- javaScript基础知识<一>
- android基础学习<一>--->五大布局对象Framelayout,Linearlayout,Relativelayout,Tablelayout,AbsoluteLayout
- Android知识整理<一>Activity
- Fragment 系列一<基础知识详解>
- 关于Unity中的3D数学基础知识<一>_坐标系相关
- c#学习<一> 基础知识
- Android 编程基础<一>
- Android React-Native系列之<一>零基础搭建React-Native开发环境
- cocos2d-x基础<一> Android环境配置和HelloWorld的运行
- <Android 基础(三十四)> TabLayout 从头到脚
- C/C++基础知识总结<一>
- swift基础知识<一>