Layout Parameters(布局参数):
在XML文件中,我们经常会看到类似于layout_width这样的布局属性(layout attributes),这些属性通常是用来定义
View的布局参数,为了让它适应于ViewGroup,
Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)
。每个ViewGroup类都实现了一个继承自ViewGroup.LayoutParams的嵌套类。
子类包含定义每个子View大小和位置的属性类型,为了让它适应于ViewGroup。
下面我们通过官方文档的一张图片以及一个XML文件来具体学习一下:
1
2 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="wrap_content" 6 android:background="#0f0" 7 android:orientation="vertical" > 8 9 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:background="#f00" 13 > 14 15 android:id="@+id/textView1InRL" 16 android:background="#fff" 17 android:layout_width="wrap_content" 18 android:layout_height="wrap_content" 19 android:text="TextView" /> 20 21 22 android:id="@+id/textView2InRL" 23 android:background="#fff" 24 android:layout_width="wrap_content" 25 android:layout_height="wrap_content" 26 android:text="TextView2" 27 android:layout_toRightOf="@id/textView1InRL" 28 /> 29 30 android:background="#fff" 31 android:layout_width="wrap_content" 32 android:layout_height="wrap_content" 33 android:text="TextView3" 34 android:layout_below="@id/textView2InRL" 35 /> 36 37
从上,我们可以看出。布局中的子元素都必须定义使他合适于它的父布局的布局参数,尽管它可能为它的子元素定义不同的布局参数。比如上图中的RelativeLayout,它受父Layout:LinearLayout影响,然后它的布局参数则影响到了它的子元素:三个TextView。
常见的布局(Common Layouts):
下面介绍Android中常用的布局:
1.线性布局(Linear Layout)
将子元素按垂直方向或水平方向线性排列。(如果窗口的长度超过了屏幕的长度,则可以生成一个滚动条)
窗口长度超过屏幕长度,生成滚动条(srollbar)的方法:
用ScrollView包裹线性布局:
1 2 android:layout_width="fill_parent" 3 android:layout_height="fill_parent" 4 xmlns:android="http://schemas.android.com/apk/res/android"> 5 6 android:layout_width="fill_parent" 7 android:layout_height="wrap_content"> 8 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:orientation="vertical"> 12 13 14 15
通过一个例子来深入学习一下线性布局:
1 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 android:paddingLeft="20dp" 6 android:paddingRight="20dp" 7 android:orientation="vertical" > 8 9 android:layout_width="fill_parent" 10 android:layout_height="wrap_content" 11 > 12 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:orientation="vertical" 16 > 17 18 android:layout_width="match_parent" 19 android:layout_height="wrap_content" 20 android:hint="帐号:" /> 21 22 android:layout_width="match_parent" 23 android:layout_height="wrap_content" 24 android:hint="密码:" /> 25 26 android:layout_width="wrap_content" 27 android:layout_height="wrap_content" 28 android:orientation="horizontal" 29 > 30 31 android:layout_width="wrap_content" 32 android:layout_height="wrap_content" 33 android:layout_marginLeft="30dp" 34 android:text="登录" 35 /> 36 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content" 39 android:layout_marginLeft="100dp" 40 android:text="注册" 41 /> 42 43 44 android:layout_width="match_parent" 45 android:layout_height="500dp" 46 android:src="@drawable/ic_launcher" 47 /> 48 49 android:layout_width="match_parent" 50 android:layout_height="wrap_content" 51 android:text="LinearLayout大小超过屏幕大小的测试" 52 /> 53 54 55
2.相关布局(Relative Layout)
正如其名,相关布局,
电脑资料
《Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)》(http://meiwen.anslib.com)。我们可以通过让子元素互相相关(比如Button A在TextView B的下面)或与父布局互相相关来指定它们在布局中的位置。
默认地,所有的子View都被放置在布局的左上方(top-left)。
设置子View之间和子View与父母之间关系的参数如下图所示:
同样通过一个例子来学习一下相关布局:
1 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" > 6 7 8 9 android:id="@+id/login" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:layout_centerHorizontal="true" 13 android:textSize="20sp" 14 android:text="登录界面" /> 15 16 17 android:id="@+id/editText1" 18 android:layout_width="wrap_content" 19 android:layout_height="wrap_content" 20 android:layout_below="@id/login" 21 android:layout_centerHorizontal="true" 22 android:layout_marginTop="24dp" 23 android:hint="username" 24 android:ems="10" > 25 26 27 28 29 30 android:id="@+id/editText2" 31 android:layout_width="wrap_content" 32 android:layout_height="wrap_content" 33 android:layout_below="@+id/editText1" 34 android:layout_centerHorizontal="true" 35 android:layout_marginTop="27dp" 36 android:ems="10" 37 android:hint="password" 38 android:inputType="textPassword" /> 39 41 42 android:id="@+id/cancelButton" 43 android:layout_width="wrap_content" 44 android:layout_height="wrap_content" 45 android:layout_below="@id/editText2" 46 android:layout_alignRight="@id/editText2" 47 android:text="取消" 48 /> 49 50 51 android:id="@+id/confirmButton" 52 android:layout_width="wrap_content" 53 android:layout_height="wrap_content" 54 android:layout_below="@id/editText2" 55 android:layout_toLeftOf="@id/cancelButton" 56 android:text="确定" 57 /> 58 59