Android - 第三章 UI开发
1.常用控件使用方法
1.1. TextView
match_parent: 让当前的控件的大小和父布局大小一样;
wrap_content: 让当前控件的大小刚好能够包含住里面的内容;
android:id 控件唯一标识符
android:layout_width 控件宽度
android:layout_height 控件高度
android:text 显示文本内容
android:gravity 文字对齐方式
android:textSize 文字大小
android:textColor 文字颜色
1.2. Button
android:textAllCaps=“false” 系统会对Button的所有英文字母自动大写转换,通过配置禁止这一默认特性
为Button的点击事件添加监听器
方法一:匿名类添加
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
方法二:实现接口添加
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
// add logic.
break;
}
}
}
1.3. EditText
android:hint 显示提示性文字,一旦输入后提示性文字就会消失。
android:maxLines 指定EditText最大行数
1.4. ImageView
在界面上展示图片的一个控件。
android:src 添加图片
imageView.setImageResourse(R.drawable.ima_2) 动态修改该控件显示图片内容
1.5 ProgressBar
在界面上显示一个进度条,表示我们的程序正在加载一些数据。
让进度条消失使用一个属性:
android:visibility 可选值:
visible 默认值,控件可见
invisible 控件不可见,但是仍然占据原来的位置和大小
gone 控件不可见,且不占用屏幕空间
代码动态控制使用setVisibility()方法
style 修改为其他样式的进度条
android:max 设置进度条最大值
代码动态控制进度条进程
int progress = progressBar.getProgress();
progress = progress + 10;
progressBar.setProgress(progress);
1.6 AlertDialog
AlertDialog 可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他空间的交互,因此AlertDialog 一般都是用于提示一些非常重要的内容或者警告信息。比如用户删除前弹出一个确认对话框。
1.7 ProgressDialog
This class was deprecated in API level 26.
与AlertDialog类似,可以在界面上弹出一个对话框,能够屏蔽其他控件的交互能力。不同的是,ProgressDialog会在对话框显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心等待。
如果在setCancelable()中传入了false,表示ProgressDialog不能通过Back键取消掉。当数据加载完成后必须调用ProgressDialog的dismiss()方法来关闭对话框,否则ProgressDialog将会一直存在。
2. 详解四种基本布局
2.1 LenearLayout
线性布局,这个布局会将他所包含的控件在线性上一次排列。
android:orientation 属性指定排列方向:
verical 垂直 horizontal 水平
android:gravity 指定文字在控件中的对齐方式
android:layout_gravity 指定控件在布局中的对齐方式
注意:当LinearLayout排列方向是horizontal时,垂直方向的对齐生效,是vertical时,水平方向的对齐方式生效。
android:layout_weight 指定我们使用比例的方式来指定控件大小,对于手机屏幕的适配性起到作用。
原理:系统会把LinearLayou下所有控件指定的layout_weight值相加,得到一个总值,然后每个控件所占大小的比例就是用该控件的layout_weight值除以刚才算出的总值。
2.2 RelativeLayout
相对布局。通过相对定位让控件出现在布局的任何位置。
相对于父布局进行定位
android:layout_alignParentLeft=“true”
android:layout_alignParentTop
android:layout_alignParentRight
android:layout_alignParentBottom
android:layout_centerInParent
相对于控件进行定位
android:layout_above="@id/button1"
android:layout_below
android:layout_toLeftOf
android:layout_toRightOf
注意:当一个控件去引用另一个控件的id时,该控件一定要定义在引用控件的后面,不然会出现找不到id的情况。
2.3 FrameLayout
帧布局。所有控件默认摆放在布局的左上角。
碎片的时候使用它。
2.4 PercentLayout
百分比布局。按比例指定控件的大小。因为LinearLayout已经支持按比例指定大小,为FrameLayout和RelativeLayout进行功能扩展,PercentFrameLayout和PercentRelativeLayout。
已经废弃,现在专用约束布局。
2.5 TableLayout
表格布局。以行列的方式管理组件。
TableLayout 布局没有边框,可以由多个 TableRow 对象或者其他组件组成,每个 TableRow 可以由多个单元格组成,每个单元格是一个 View。TableRow 不需要设置宽度 layout_width 和高度 layout_height,其宽度一定是 match_parent,即自动填满父容器,高度一定为 wrap_content,即根据内容改变高度。但对于 TableRow 中的其他组件来说,是可以设置宽度和高度的,只是必须是 wrap_content 或者 fill_parent。
TableLayout 布局提供了几个特殊属性,可以实现以下特殊效果。
- android:shrinkColumns 属性:该属性用于设置可收缩的列。当可收缩的列太宽以至于布局内的其他列不能完全显示时,可收缩列会纵向延伸,压缩自己所占的空间,以便于其他列可以完全显示出来。- android:shrinkColumns=“1” 表示将第 2 列设置为可收缩列,列数从 0 开始。
- android:stretchColumns 属性:该属性用于设置可伸展的列。可伸展的列会自动扩展长度以填满所有可用空间。android:stretchColumns=“1” 表示将第 2 列设置为可伸展的列。
- android:collapseColumns 属性:该属性用于设置隐藏列。android:collapseColumns=“1” 表示将第 2 列隐藏不显示。
2.6 AbsoluteLayout
绝对布局。放入该布局的组件需要通过 android:layout_x 和 android:layout_y 两个属性指定其准确的坐标值,并显示在屏幕上。
理论上,AbsoluteLayout 布局可用以完成任何的布局设计,灵活性很大,但是在实际的工程应用中不提倡使用这种布局。因为使用这种布局不但需要精确计算每个组件的大小,增大运算量,而且当应用程序在不同屏幕尺寸的手机上运行时会产生不同效果。