Android Studio学习笔记(七)

一、图形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);
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值