Android 中的四种基本布局
2015-11-20 16:44
369 查看
LinearLayout
LinearLayout 又称作线性布局,是一种非常常用的布局。正如它的名字所秒速的一样,这个布局会将它所包含的控件在线性方向上依次排列。
这里注意的是:如果LinearLayout的排列方向是horizontal,内部的控件就绝对不能将宽度指定为match_parent,因为这样的话单独一个控件就会将整个水平方向占满,其他的控件就没有可放置的位置了。同样的道理,如果LinearLayout的排列方向是Vertical,内部的控件就不能将高度指定为match_parent.
android:gravity
是用于指定文字在控件中的对齐方式,而
android:layout_gravity
是用于指定控件在布局中的对齐方式
android:layout_gravity
的可选值和android:gravity
差不多
[align=left]当LinearLayout的排列方向是horizontal时,只有垂直方向上的对齐方式才会生效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对齐方式。同样的道理,当LinearLayout的排列方向是Vertical时,只有水平方向的对齐方式才会生效。[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]android:layout_weight:[/align]
[align=left]
[/align]
[align=left]允许我们使用比例的方式来指定控件的大小,它在手机屏幕的适配性方面可以起到非常重要[/align]
[align=left]的作用。[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]RelativeLayout[/align]
[align=left]相对布局[/align]
[align=left]
[/align]
[align=left]相对于父布局定位:[/align]
[align=left]android:layout_alignParentLeft="true"[/align]
[align=left]android:layout_alignParentTop="true"[/align]
[align=left]android:layout_alignParentRight="true"[/align]
[align=left]android:layout_centerInParent="true"[/align]
[align=left]android:layout_alignParentBottom="true"[/align]
[align=left]
[/align]
[align=left]相对于一个控件定位:[/align]
[align=left]android:layout_above:可以让一个控件位于另一个控件的上方[/align]
[align=left]android:layout_below:可以让一个控件位于另一个控件的下方[/align]
[align=left]android:layout_toLeftOf:可以让一个控件位于另一个控件的左侧[/align]
[align=left]android:layout_toRightOf:可以让一个控件位于另一个控件的右侧[/align]
[align=left]
[/align]
[align=left]
[/align]
注意,当一个控件去引用另一个控件的
id
时,该控件一定要定义在引用控件的后
面,不然会出现找不到
id
的情况。
[align=left]
[/align]
[align=left]
[/align]
[align=left]另外一组相对于控件进行定位的属性:[/align]
[align=left]android:layout_alignLeft:表示让一个控件的左边缘和另一个控件的左边缘对齐[/align]
[align=left]android:layout_alignRight:表示让一个控件的右边缘和另一个控件的右边缘对齐[/align]
[align=left]android:layout_alignTop:表示让一个控件的顶部边缘和另一个控件的顶部边缘对齐[/align]
[align=left]android:layout_alignBottom:表示让一个控件的底部边缘和另一个控件的底部边缘对齐[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]FrameLayout[/align]
[align=left]FrameLayout没有任何的定位方式,所有的控件都会摆放在布局的左上角。[/align]
[align=left]<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="match_parent"[/align]
[align=left]>[/align]
[align=left]<Button[/align]
[align=left]android:id="@+id/button"[/align]
[align=left]android:layout_width="wrap_content"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:text="Button"[/align]
[align=left]/>[/align]
[align=left]<ImageView[/align]
[align=left]android:id="@+id/image_view"[/align]
[align=left]android:layout_width="wrap_content"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:src="@drawable/ic_launcher"[/align]
[align=left]/>[/align]
[align=left]</FrameLayout>[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]TableLayout[/align]
[align=left]这种布局不是很常用。[/align]
activity_main.xml
中的代码改成如下所示:
[align=left]<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="match_parent" >119[/align]
[align=left]<TableRow>[/align]
[align=left]<TextView[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:text="Account:" />[/align]
[align=left]<EditText[/align]
[align=left]android:id="@+id/account"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:hint="Input your account" />[/align]
[align=left]</TableRow>[/align]
[align=left]<TableRow>[/align]
[align=left]<TextView[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:text="Password:" />[/align]
[align=left]<EditText[/align]
[align=left]android:id="@+id/password"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:inputType="textPassword" />[/align]
[align=left]</TableRow>[/align]
[align=left]<TableRow>[/align]
[align=left]<Button[/align]
[align=left]android:id="@+id/login"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:layout_span="2" //将两列合并成一列[/align]
[align=left]android:text="Login" />[/align]
[align=left]</TableRow>[/align]
[align=left]</TableLayout>[/align]
[align=left]
[/align]
[align=left]
[/align]
注意:每加入一个
TableRow就表示在表格中添加了一行,然后在TableRow中每加入一个控件,就表示在该行中加入了一列,TableRow
中的控件是不能指定宽度的
[align=left]
[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]解决方法:android:stretchColumns[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]自定义控件[/align]
[align=left]控件的布局结构[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
所用的所有控件都是直接或间接继承自
View。
所有布局都是直接或间接继承自
ViewGroup。
[align=left]
[/align]
[align=left]
[/align]
View
是Android
中一种最基本的
UI 组件,它可以在屏幕
上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是在View
的基础之上又添加了各自特有的功能
[align=left]
[/align]
ViewGroup
则是一种特殊的View,它可以包含很多的子
View
和子ViewGroup
,是一个用于放置控件和布局的容器。
[align=left]
[/align]
[align=left]
[/align]
[align=left]android:layout_margin:这个属性,可以指定控件在上下左右方向上偏移的距离。[/align]
[align=left]android:layout_marginLeft或android:layout_marginTop等属性来单独指定控件在某个方向上的距离[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]例子1: 创建带有返回键和编辑键的标题栏[/align]
[align=left]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:background="@drawable/title_bg" >[/align]
[align=left]<Button[/align]
[align=left]android:id="@+id/title_back"[/align]
[align=left]android:layout_width="wrap_content"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:layout_gravity="center"[/align]
[align=left]android:layout_margin="5dip"[/align]
[align=left]android:background="@drawable/back_bg"[/align]
[align=left]android:text="Back"[/align]
[align=left]android:textColor="#fff" />[/align]
[align=left]<TextView[/align]
[align=left]android:id="@+id/title_text"[/align]
[align=left]android:layout_width="0dip"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:layout_gravity="center"[/align]
[align=left]android:layout_weight="1"[/align]
[align=left]android:gravity="center"[/align]
[align=left]android:text="Title Text"[/align]
[align=left]android:textColor="#fff"[/align]
[align=left]android:textSize="24sp" />[/align]
[align=left]<Button[/align]
[align=left]android:id="@+id/title_edit"[/align]
[align=left]android:layout_width="wrap_content"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:layout_gravity="center"[/align]
[align=left]android:layout_margin="5dip"[/align]
[align=left]android:background="@drawable/edit_bg"[/align]
[align=left]android:text="Edit"[/align]
[align=left]android:textColor="#fff" />[/align]
[align=left]</LinearLayout>[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]然后在每一个布局添加标题栏:[/align]
[align=left]<include layout="@layout/title" />[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]创建自定义控件:[/align]
[align=left]1.新建TitleLayout 继承LinearLayout[/align]
[align=left]public class TitleLayout extends LinearLayout {[/align]
[align=left]public TitleLayout(Context context, AttributeSet attrs) {[/align]
[align=left]super(context, attrs);[/align]
[align=left]LayoutInflater.from(context).inflate(R.layout.title, this);[/align]
[align=left]}[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]然后我们需要在布局文件中添加这个自定义控件,修改[/align]
activity_main.xml
中的代码,如下所示:
[align=left]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="match_parent" >[/align]
[align=left]<com.example.uicustomviews.TitleLayout[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]></com.example.uicustomviews.TitleLayout>[/align]
[align=left]</LinearLayout>[/align]
LinearLayout 又称作线性布局,是一种非常常用的布局。正如它的名字所秒速的一样,这个布局会将它所包含的控件在线性方向上依次排列。
这里注意的是:如果LinearLayout的排列方向是horizontal,内部的控件就绝对不能将宽度指定为match_parent,因为这样的话单独一个控件就会将整个水平方向占满,其他的控件就没有可放置的位置了。同样的道理,如果LinearLayout的排列方向是Vertical,内部的控件就不能将高度指定为match_parent.
android:gravity
是用于指定文字在控件中的对齐方式,而
android:layout_gravity
是用于指定控件在布局中的对齐方式
android:layout_gravity
的可选值和android:gravity
差不多
[align=left]当LinearLayout的排列方向是horizontal时,只有垂直方向上的对齐方式才会生效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对齐方式。同样的道理,当LinearLayout的排列方向是Vertical时,只有水平方向的对齐方式才会生效。[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]android:layout_weight:[/align]
[align=left]
[/align]
[align=left]允许我们使用比例的方式来指定控件的大小,它在手机屏幕的适配性方面可以起到非常重要[/align]
[align=left]的作用。[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]RelativeLayout[/align]
[align=left]相对布局[/align]
[align=left]
[/align]
[align=left]相对于父布局定位:[/align]
[align=left]android:layout_alignParentLeft="true"[/align]
[align=left]android:layout_alignParentTop="true"[/align]
[align=left]android:layout_alignParentRight="true"[/align]
[align=left]android:layout_centerInParent="true"[/align]
[align=left]android:layout_alignParentBottom="true"[/align]
[align=left]
[/align]
[align=left]相对于一个控件定位:[/align]
[align=left]android:layout_above:可以让一个控件位于另一个控件的上方[/align]
[align=left]android:layout_below:可以让一个控件位于另一个控件的下方[/align]
[align=left]android:layout_toLeftOf:可以让一个控件位于另一个控件的左侧[/align]
[align=left]android:layout_toRightOf:可以让一个控件位于另一个控件的右侧[/align]
[align=left]
[/align]
[align=left]
[/align]
注意,当一个控件去引用另一个控件的
id
时,该控件一定要定义在引用控件的后
面,不然会出现找不到
id
的情况。
[align=left]
[/align]
[align=left]
[/align]
[align=left]另外一组相对于控件进行定位的属性:[/align]
[align=left]android:layout_alignLeft:表示让一个控件的左边缘和另一个控件的左边缘对齐[/align]
[align=left]android:layout_alignRight:表示让一个控件的右边缘和另一个控件的右边缘对齐[/align]
[align=left]android:layout_alignTop:表示让一个控件的顶部边缘和另一个控件的顶部边缘对齐[/align]
[align=left]android:layout_alignBottom:表示让一个控件的底部边缘和另一个控件的底部边缘对齐[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]FrameLayout[/align]
[align=left]FrameLayout没有任何的定位方式,所有的控件都会摆放在布局的左上角。[/align]
[align=left]<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="match_parent"[/align]
[align=left]>[/align]
[align=left]<Button[/align]
[align=left]android:id="@+id/button"[/align]
[align=left]android:layout_width="wrap_content"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:text="Button"[/align]
[align=left]/>[/align]
[align=left]<ImageView[/align]
[align=left]android:id="@+id/image_view"[/align]
[align=left]android:layout_width="wrap_content"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:src="@drawable/ic_launcher"[/align]
[align=left]/>[/align]
[align=left]</FrameLayout>[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]TableLayout[/align]
[align=left]这种布局不是很常用。[/align]
activity_main.xml
中的代码改成如下所示:
[align=left]<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="match_parent" >119[/align]
[align=left]<TableRow>[/align]
[align=left]<TextView[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:text="Account:" />[/align]
[align=left]<EditText[/align]
[align=left]android:id="@+id/account"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:hint="Input your account" />[/align]
[align=left]</TableRow>[/align]
[align=left]<TableRow>[/align]
[align=left]<TextView[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:text="Password:" />[/align]
[align=left]<EditText[/align]
[align=left]android:id="@+id/password"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:inputType="textPassword" />[/align]
[align=left]</TableRow>[/align]
[align=left]<TableRow>[/align]
[align=left]<Button[/align]
[align=left]android:id="@+id/login"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:layout_span="2" //将两列合并成一列[/align]
[align=left]android:text="Login" />[/align]
[align=left]</TableRow>[/align]
[align=left]</TableLayout>[/align]
[align=left]
[/align]
[align=left]
[/align]
注意:每加入一个
TableRow就表示在表格中添加了一行,然后在TableRow中每加入一个控件,就表示在该行中加入了一列,TableRow
中的控件是不能指定宽度的
[align=left]
[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]解决方法:android:stretchColumns[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]自定义控件[/align]
[align=left]控件的布局结构[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
所用的所有控件都是直接或间接继承自
View。
所有布局都是直接或间接继承自
ViewGroup。
[align=left]
[/align]
[align=left]
[/align]
View
是Android
中一种最基本的
UI 组件,它可以在屏幕
上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是在View
的基础之上又添加了各自特有的功能
[align=left]
[/align]
ViewGroup
则是一种特殊的View,它可以包含很多的子
View
和子ViewGroup
,是一个用于放置控件和布局的容器。
[align=left]
[/align]
[align=left]
[/align]
[align=left]android:layout_margin:这个属性,可以指定控件在上下左右方向上偏移的距离。[/align]
[align=left]android:layout_marginLeft或android:layout_marginTop等属性来单独指定控件在某个方向上的距离[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]例子1: 创建带有返回键和编辑键的标题栏[/align]
[align=left]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:background="@drawable/title_bg" >[/align]
[align=left]<Button[/align]
[align=left]android:id="@+id/title_back"[/align]
[align=left]android:layout_width="wrap_content"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:layout_gravity="center"[/align]
[align=left]android:layout_margin="5dip"[/align]
[align=left]android:background="@drawable/back_bg"[/align]
[align=left]android:text="Back"[/align]
[align=left]android:textColor="#fff" />[/align]
[align=left]<TextView[/align]
[align=left]android:id="@+id/title_text"[/align]
[align=left]android:layout_width="0dip"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:layout_gravity="center"[/align]
[align=left]android:layout_weight="1"[/align]
[align=left]android:gravity="center"[/align]
[align=left]android:text="Title Text"[/align]
[align=left]android:textColor="#fff"[/align]
[align=left]android:textSize="24sp" />[/align]
[align=left]<Button[/align]
[align=left]android:id="@+id/title_edit"[/align]
[align=left]android:layout_width="wrap_content"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]android:layout_gravity="center"[/align]
[align=left]android:layout_margin="5dip"[/align]
[align=left]android:background="@drawable/edit_bg"[/align]
[align=left]android:text="Edit"[/align]
[align=left]android:textColor="#fff" />[/align]
[align=left]</LinearLayout>[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]然后在每一个布局添加标题栏:[/align]
[align=left]<include layout="@layout/title" />[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]创建自定义控件:[/align]
[align=left]1.新建TitleLayout 继承LinearLayout[/align]
[align=left]public class TitleLayout extends LinearLayout {[/align]
[align=left]public TitleLayout(Context context, AttributeSet attrs) {[/align]
[align=left]super(context, attrs);[/align]
[align=left]LayoutInflater.from(context).inflate(R.layout.title, this);[/align]
[align=left]}[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]然后我们需要在布局文件中添加这个自定义控件,修改[/align]
activity_main.xml
中的代码,如下所示:
[align=left]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="match_parent" >[/align]
[align=left]<com.example.uicustomviews.TitleLayout[/align]
[align=left]android:layout_width="match_parent"[/align]
[align=left]android:layout_height="wrap_content"[/align]
[align=left]></com.example.uicustomviews.TitleLayout>[/align]
[align=left]</LinearLayout>[/align]
相关文章推荐
- Android 使用Intent
- Android 中常见的控件
- Android DPI
- android.support.design.widget.NavigationView之findViewById()出现NullPointerException
- 使用asm.jar将Android手机屏幕投影到电脑
- Android Interface Definition Language (AIDL)
- Android——简易进度条与对话框
- android-list底部按钮
- Android中获取应用程序(包)的大小-----PackageManager的使用(二)
- 局域网中android与android之间的通信
- Android - GestureDetector.onGestureLister
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- Android系统存在多个Launcher时,设置开机进入默认的Launcher
- Android 防住用户查看文件和文件夹思路
- Android SimpleCursorAdapter的使用
- Android5.1 设置壁纸流程简析
- Android三类传感器-动作传感器-位置传感器-环境传感器
- Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定
- Android实现高斯模糊
- Android InputEvent(Motion/Key/Sleep....) 流程跟踪