一、图形Drawable
- Drawable 类型表达了各种各样的图形,包括图片、色块、画板、背景等。
- 包含图片在内的图形文件放在res目录的各个drawable目录下,其中drawable目录一般保存描述性的XML文件,而图片文件一般放在具体分辨率的drawable目录下。
- 各视图的background属性、ImageView 和ImageButton的src属性、TextView和Button四个方向的drawable***系列属性都可以引用图形文件。
- drawable-v21 适配5.0及以上手机资源文件
- drawable-v24 适配7.0及以上手机资源文件
- drawable-v21 drawable-v24可共存
- 优先从等于或者临近手机android版本的的适配资源文件夹中找适配文件,如果找不到就去更低的适配资源文件中找,如果再找不到就在drawable中找通用的适配资源;如 手机版本是7.0,就会优先从24中找,如果找不到则看有没有其他版本的适配资源,如果有21,则从21中找,如果再找不到就去drawable中找;一般情况下至少drawable中存在一个适配资源
Shape,用来描述常见的几何形状,
形状图形的定义文件是以shape标签为根节点的XML描述文件,支持四种类型的形状:
rectangle:矩形
oval:椭圆,corners节点失效
line:直线,必须设置stroke节点
ring:圆环
size(尺寸)
height:像素类型,图形高度
width:像素类型,图像宽度
stroke(描边)
stroke是shape的下级节点,它描述卡形状图形的描边规格
color:颜色类型,描边的颜色
dashGap:像素类型,每段虚线之间的间隔
dashWidth:像素类型,每段虚线的宽度,若dashGap或dashWidth为0,描边为实线
width:像素类型,描边的厚度
corners(圆角)
corners是shape的下级节点,它描述了形状图形的圆角大小,若无corners节点,则表示没有圆角
bottomLeftRadius:像素类型,左下圆角的半径
bottomRightRadius:像素类型,右下圆角的半径
topLeftRadius:像素类型,左上圆角的半径
topLeftRadius:像素类型,右上圆角的半径
radius:像素类型,4个圆角的半径
solid(填充)
solid是shape的下级节点,它描述了形状图形的填充色彩。若无solid,则表示无填充颜色
color:颜色类型,内部填充的颜色
padding(间隔)
padding是shape的下级节点,它描述了形状图形与周围边界的间隔,若无padding,则表示四周不设间隔
top:像素类型,与上方的间隔
bottom:像素类型,与下方的间隔
left:像素类型,与左方的间隔
right:像素类型,与右方的间隔
gradient(渐变)
gradient是shape的下级节点,它描述了形状图形的颜色渐变,若无padding,则表示没有渐变效果
angle:整型,渐变的起始角度。为0时表示适中的9点位置,值增大表示往逆时针方向旋转。例如,值为90表示6点位置,值为180表示3点位置,值为270表示0点/12点位置。
type:字符串类型,渐变类型,如下
渐变类型 | 说明 |
linear | 线性渐变,默认值 |
radial | 放射渐变,起始颜色就是圆心颜色 |
sweep | 滚动渐变,即一个线段以某个端点为圆心做360度旋转 |
- centerX:浮点型,圆心的X坐标。当android:type="linear"时不可用。
- centerY:浮点型,圆心的Y坐标。当android:type="linear"时不可用。
- gradientRadius:整型,渐变的半径。当android:type="radial"时需要设置该属性。
- centerColor:颜色类型,渐变的中间颜色。
- startColor:颜色类型,渐变的起始颜色。
- endColor:颜色类型,渐变的终止颜色。
- ouseLevel:布尔类型,设置为true为无渐变色、false为有渐变色。
在实际开发中,形状图形主要使用3个节点:stroke(描边)、corners(圆角)和solid(填充)。至于shape根节点的属性一般不用设置(默认矩形即可)。
示例:
二、点9图片
(png图片)
左侧图片加工,右边显示效果
只有黑线内图像会拉伸
三、状态列表图形
Button正常是凸起的,按下时是凹陷的
state_pressed="true" 按下显示
https://blog.csdn.net/qq_40985906/article/details/84585573
四、 复选框CheckBox
五、开关按钮Switch
Switch 是开关按钮,它在选中与取消选中时可展现的界面元素比复选框丰富。
Switch 控件新添加的XML属性说明如下:
- textOn:设置右侧开启时的文本。
- textOff:设置左侧关闭时的文本。
- track:设置开关轨道的背景。
- thumb:设置开关标识的图标。
- check:设置开关是否开启
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch(buttonView.getId()) {
case R.id.cb_rect:
if (isChecked) view_content.setBackgroundResource(R.drawable.shape_rect_gold);
break;
case R.id.cb_oval:
if (isChecked) view_content.setBackgroundResource(R.drawable.shape_oval_rose);
break;
case R.id.sw_background:
if (isChecked) view_content.setBackgroundResource(R.drawable.shape_oval_rose);
else view_content.setBackgroundResource(R.drawable.shape_rect_gold);
break;
}
}
单选按钮RadioButton
RadioGroup实质上是个布局,同一组RadioButton都要放在同一个RadioGroup节点下。
除了RadioButton,也允许放置其他控件。
六、文本输入
本节介绍如何在编辑框EditText上高效地输入文本,包括:如何改变编辑框的控件外观,如何利用焦点变更监听器提前校验输入位数,如何利用文本变化监听器自动关闭软键盘。
编辑框EditText
编辑框EditText用于接收软键盘输入的文字,例如用户名、密码、评价内容等,它由文本视图派生而来,除了TextView已有的各种属性和方法,EditText还支持下列XML属性。
inputType:指定输入的文本类型。输入类型的取值说明见表5-4,若同时使用多种文本类型,则可使用竖线“|”把多种文本类型拼接起来。
maxLength:指定文本允许输入的最大长度。
hint:指定提示文本的内容。
textColorHint:指定提示文本的颜色。
输入类型 | 说明 |
text | 文本 |
textPassword | 文本密码。显示时用圆点“·”代替 |
number | 整型数 |
numberSigned | 带符号的数字。允许在开头带负号"-" |
numberDecimal | 带小数点的数字 |
numberPassword | 数字密码。显示时用圆点“·”代替 |
datetime | 时间日期格式。除了数字外,还允许输入横线,斜杆、空格、冒号 |
date | 日期格式。除了数字外,还允许输入横线"-”和斜杆"/" |
time | 时间格式。除了数字外,还允许输入冒号":" |
android:layout_marginRight 右间距
焦点变更监听器
1、用户名为空,提示请输入用户名
2、密码为空,提示请输入密码
选中时框变为蓝色
七、文本变化监听器
自动关闭软键盘
判断已输入文字达到指定位数
https://blog.csdn.net/weixin_42602900/article/details/126290125
大多数控件都可以获取焦点,也就是处在选中状态。如果android:focusable属性值为true,表示可以通过键盘(虚拟键盘或物理键盘)或轨迹球将焦点移动到当前控件上。如果设置该属性为false,则无法将焦点移到当前控件。
在默认情况下,触摸一个按钮虽然可以触发控件的单击事件,但无法使控件处在焦点状态。而将android:focusableInTouchMode属性设置为true,当触摸值设为ture,当触摸某个控件时,会先将焦点移动到被触摸的控件上,然后需要再触摸该控件才会响应单击事件。但要注意,需要将android:focusable属性设置为true,当前控件才可以获得焦点,否则当前控件无论使用任何方式都无法获取焦点。
文本监听器接口名称TextWatcher:
BeforeTextWatcher,在文本改变之前
onTextWatcher,在文本改变过程中
afterTextWatcher,文本改变之后
八、提醒对话框AlertDialog
可完成提示、确定、选择等功能。AlertDialog借助建造器AlertDialog.Builder才能完成参数设置。
调用建造器的create方法生成对话框实例,再调用对话框实例的show方法,在页面上弹出提醒对话框。
九、声音播放
参考资料:https://zhuanlan.zhihu.com/p/369073201
音频加载
private void initSound() {
soundPool=new SoundPool.Builder().build();
soundId=soundPool.load(this,R.raw.wav_button,1);
}
播放
public void onClick(View v) {
switch (v.getId()){
case R.id.bt_date:
soundPool.play(soundId,
1f, //左耳道音量【0~1】
1f, //右耳道音量【0~1】
0, //播放优先级【0表示最低优先级】
1, //循环模式【0表示循环一次,-1表示一直循环,其他表示数字+1表示当前数字对应的循环次数】
1 //播放速度【1是正常,范围从0~2】
);
break;
}
}
多个音频加载
Android 短提示音播放SoundPool 和AndroidStudio添加raw文件夹 - 灰信网(软件开发博客聚合)
Android SDK 提供的3套音频播放的API之玩转SoundPool - 知乎
initSound();
playSound(1);
playSound(2);
十、日期对话框DatePickerDialog
获取选择的时间
dp = findViewById(R.id.dp);
tv_date = findViewById(R.id.tv_date);
findViewById(R.id.bt_date).setOnClickListener(this);
弹出时间表
DatePickerDialog dialog = new DatePickerDialog(this,this,2023,1,1);
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
String desc=String.format("%d年%d月%d日",year,month,dayOfMonth);
tv_date.setText(desc);
}
获取当前时间
//获取日历的一个实例,里面包括当前年月日
Calendar calendar = Calendar.getInstance();
//calendar.get(Calendar.YEAR);
//calendar.get(Calendar.MONTH);
//calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(this,this,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
十一、时间对话框TimePickerDialog
与日期相同
获取当前时间
Calendar calendar = Calendar.getInstance();
//小时,分钟,是否24小时制
TimePickerDialog dialog = new TimePickerDialog(this,this,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true);
dialog.show();
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String desc=String.format("%d点%d分",hourOfDay,minute);
tv_date.setText(desc);
}