1、ViewGroup 和View
ViewGroup是布局,类似我们家的布局,哪里是厨房,哪里是卧室……,
View是控件,类似于家具,哪里放沙发,哪里放电视……;
2、界面布局的编写方式
(1) 在xml文件中编写,通常采用该方式
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="我是xml文件中的控件"
android:textColor="#ff0000"
android:textSize="18sp" />
</RelativeLayout>
(2)在Java代码中编写
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建布局文件
RelativeLayout relativeLayout = new RelativeLayout(this);
//设置参数
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
//创建控件
TextView textView = new TextView(this);
textView.setText("我是JAVA代码创建的控件");
textView.setTextColor(Color.RED);
textView.setTextSize(18);
//组装
relativeLayout.addView(textView, params);
setContentView(relativeLayout);
}
}
3 、常见的五种布局
(1)布局的通用属性:
五种布局都继承自ViewGroup,通用属性有6个:
(2)相对布局:RelativeLayout
控件位置的属性:4组15个
(3)线性布局:LinearLayout
orientation–写在LinearLayout标签里面
horizontal:水平
vertical:垂直
layout_weight–权重,写在控件里面的,需要把控件的宽度设置成0dp
(4)表格布局:TableLayout
TableLayout采用行、列的形式来管理控件。通过在TableLayout布局中添加TableRow布局或控件来控制表格行数,在TableRow布局中添加控件来控制表格列数。
TableLayout布局常用属性
属性名称 | 功能描述 | 例子 |
---|---|---|
android:stretchColumns | 设置可被拉伸的列 | ="0"表示第1列可被拉伸 |
android:shrinkColumns | 设置可被收缩的列 | ="1,2"表示2,3列可被收缩 |
android:collapseColumns | 设置可被隐藏的列 | ="0"表示第1列可被隐藏 |
TableLayout布局中控件常用属性
属性名称 | 功能描述 | 例子 |
---|---|---|
android:layout_column | 设置该控件显示的位置 | ="1"表示在第二个位置显示 |
android:layout_span | 设置该控件占据几行,默认为1行 |
(5)帧布局:FrameLayout
FrameLayout用于在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧。后加入的控件会叠加在上一个控件上层。默认情况下,帧布局中的所有控件会与左上角对齐
属性名称 | 功能描述 |
---|---|
android:foreground | 设置帧布局容器的前景图像(始终在所有子控件之上) |
android:foregroundGravity | 设置前景图像显示的位置 |
ConstraintLayout约束布局
ConstraintLayout是_Android Studio_2.2新添加的布局。ConstrainLayout并不太适合使用XML代码的方式编写布局,但非常适合使用可视化的方式编写界面布局
1.相对定位
一个空间相对于另一个空间进行定位。ConstrainLayout布局中的控件可以在横向和纵向上以添加约束关系的方式进行相对定位。
- 横向:left、start、right、end
- 纵向:top、bottom、baseline(文本底部基准线)
相对定位关系的属性
2.居中定位和倾向
控件可以通过添加约束的方式确定该控件在父布局中的相对位置。当相同方向上,控件两边同时向ConstraintLayout添加约束,则控件在添加约束的方向上居中显示。
两个约束的力大小不等时,就会产生倾向
倾向的属性
属性名称 | 功能描述 |
---|---|
layout_constraintHorizontal_bias | 横向的倾向 |
layout_constraintVertical_bias | 纵向的倾向 |
3.Chain
Chain是一种特殊的约束。它使我们能够对一组水平或垂直方向上互相关联的控件进行统一管理。一组控件通过一个双向的约束关系链接起来,就能形成一个Chain。
Chain中第一个控件成为头控件,头控件可以通过layout_constraintHorizontal_chainStyle和 layout_constraintVertical_chainStyle属性设置水平链条和竖直链条的样式
- spread:设置控件在布局内均匀分布。
- spread_insid:设置两端的控件与父布局无间距显示,其他的控件将在剩余的空间内采用spread样式进行布局
- packed:设置Chain中的所有控件合并在一起后在布局内居中显示。
当控件宽或高设置为0dp时,Chain的3种样式可以配合layout_constraintHorizontalweight形成Weighted Chain的样式。
packed可以搭配layoutconstraintHorizontal_bias控制Chain与父容器的间距从而形成packed Chain With Bias样式。