当前位置: 首页 > news >正文

安卓开发学习10-中级控件

目录

1.图形定制

1.1 图形Drawable

1.2 形状图形

1.2.1 属性说明

1.2.2 shape下级节点——参数设置

1.2.3 创建

1.3 九宫格图片(点九图片)

1.3.1 作用

1.3.2 创建

1.3.3 点九图片处理

1.3.4 背景图片被主题覆盖导致无法显示问题

1.4 状态列表图形

2.选择按钮

2.1 复选框CheckBox

2.2 开关按钮Switch

2.3 单选按钮RadioButton

3.文本输入

3.1 编辑框EditText

3.2 焦点变量监听器

3.3 文本变化监听器

4.对话框

4.1 编辑对话框AlertDialog

4.2 日期对话框DatePickerDialog

4.3 时间对话框TimePickerDialog

5 自动消失提示框


1.图形定制

1.1 图形Drawable

Drawable类型表达了各种各样的图形 ,包括图片、色块、画板、背景等。

包含图片在内的图形文件放在res目录的各个drawable目录下,其中drawable目录一般保存描述性的XML文件,而图片文件一般放在具体分辨率的drawable目录下。例如:

  • drawable-ldpi里面存放低分辨率的图片(如240 * 320),现在基本没有这样的只能手机。
  • drawable-mdpi里面存放中等分辨率的图片(如320 * 480),这样的只能手机已经很少了。
  • drawable-hdpi俩面存放加高分辨率的图片,例如(480* 800),一般对应4英寸~4.5英寸的手机(但不绝对,同尺寸的手机有可能分辨率不同,手机分辨率有高有低,因为分辨率低了屏幕会有模糊的感觉)。
  • drawable-xhdpi里面存放加高分辨率的图片(如720 * 1280),一般对应5英寸~5.5英寸的手机。
  • drawable-xxhdpi里面存放加高分辨率的图片(1080 * 1920),一般对应6英寸~6.5英寸的手机。
  • drawable-xxxhpi里面存放超超高分辨率的图片(如1440 * 2560),一般对应7英寸以上的平板电脑。

基本上,分辨率每加大一级,宽度和高度就要增加二分之一或三分之一像素,如果各目录存在同名图片,Android就会根据手机的分辨率分辨适配对应文件夹里的图片。在开发APP时,为了兼容不同的手机屏幕,在各目录存放不同分辨率的图片,才能打到最合适的显示效果。

例如,在drawable-hdpi放了一张背景图片bg.png(分辨率480 * 800),其他目录没放,使用分辨率为480 * 800的手机查看该App屏幕,但使用分辨率为720 * 1280的手机查看该App,会发现背景图片有点模糊,原因是Android为了让背景图片是适应高分辨的屏幕,强行把bg.png拉伸到720 * 1280,拉伸的后果就是图片变模糊了。

在XML布局文件中引用图形文件可使用“@drawable/不含扩展名的文件名称”这种形式。

"@drawable/null"表示图形资源引用为空。

XML引用图形资源的属性:各视图的background属性ImageView和ImageButton的src属性TextView和Button四个方向的drawable***系列属性都可引用图形文件。

1.2 形状图形

1.2.1 属性说明

shape图形又成形状图形,它用来描述常见的几何形状,包括矩形、圆角矩形、圆形、椭圆等等。

形状图形的定义文件是以shape标签为根节点的XML描述文件,它支持四种类型的形状:

  • rectangle:矩形,默认值。
  • oval:椭圆。此时corners节点会失效。
  • line:直线。此时必须设置stroke节点,不然会报错。
  • ring:圆环。

1.2.2 shape下级节点——参数设置

size(尺寸),描述形状图形的宽高尺寸。若无size节点,则表示宽高与宿主视图一样大小。

  • height:像素类型,图形高度。
  • width:像素类型,图形宽度。

stroke(描边),描述了形状图形的描边规格。若无stroke节点,则表示不存在描边。下面是stroke节点的常用属性说明。

  • color:颜色类型,描边颜色。
  • dashGao:像素类型,每段虚线之间的间隔。
  • dashWidth:像素类型,没端序点的宽度。若dashGap和dashWidth有一个值为0,则描边为实线。
  • width:像素类型,描边的厚度。

corners(圆角),corners是shape的下级节点,它描述了形状图形的圆角大小。若无corners节点的常用属性说明。

  • bottomLeftRadius:像素类型,左下圆角的半径。
  • bottomRightRadius:像素类型,右下圆角的半径。
  • topLeftRadius:像素类型,左下圆角的半径。
  • topRightRadius:像素类型,右下圆角的半径。
  • radius:像素类型,4个圆角的半径(若有上面4个圆角半径的定义,则不需要radius定义)。

solid(填充),描述了形状图形的填充色彩。若无solid节点,则表示无填充颜色。下面是solid节点的常用属性说明。

  • color:颜色类型,内部填充的颜色。

padding(间隔),描述了形状图形与周围边界的间隔。若无padding节点,则表示四周不设间隔。下面是padding节点的常用属性说明。

  • top:像素类型,与上方的间隔。
  • bottom:像素类型,与下方的间隔。
  • left:像素类型,与左边的间隔。
  • right:像素类型,与右边的间隔。

gradient(渐变),描述形状图形的颜色渐变。若无gradient节点,则表示没有渐变效果。下面是gradient节点的常用属性说明。

  • angle:整数型,渐变的起始角度,为0时表示时钟的9点位置,值增大表示往逆时针方向旋转。例如,值为90表示6点位置,值为180表示3点位置,值为270表示0点/12点位置。
  • type:字符串类型,渐变类型,渐变类型的取值说明见下表
渐变类型的取值说明
渐变类型说明
linear线性渐变,默认值
radial放射渐变,起始颜色就是圆心颜色
sweep滚动渐变,即一个线段以某个端点为圆心坐360度旋转
  • conterX:浮点型,圆心的X坐标。当android:type="linear"时不可用。
  • conterY:浮点型,圆心的Y坐标。当android:type="linear"时不可用。
  • gradientRadius:整数型。渐变的半径。当android:type="radial时需要设置该属性。
  • centerColor:颜色类型,渐变的中间颜色。
  • useLevel:布尔类型,设置为true为无渐变色、false为有渐变色。

1.2.3 创建

1.3 九宫格图片(点九图片)

1.3.1 作用

将某张图片设置成视图背景时,如果图片尺寸太大,则系统会自动拉伸图片使之填满背景,但一旦图片拉伸过大,画面容易变得模糊。

点九图片就是为了避免这一问题。之所以叫点九图片,是因为后缀是“.9.png”。

1.3.2 创建

在原图片的基础上,创建点九图片。

1.3.3 点九图片处理

9pathfilevideo

效果对比图

1.3.4 背景图片被主题覆盖导致无法显示问题

找到res->value->theme,修改为一个以.Bridge结尾的主题。如下图:

1.4 状态列表图形

创建:在drawable中创建xml文件,根节点是selector。同上面shape创建方式一致,只有根节点的区别。主要用于设置控件样式。

用于:状态列表图形不仅可以用于按钮控件,还可以用于其他拥有多种状态的控件。

使用:xml文件android:backgroud属性中。

状态类型的取值说明
状态类型的属性名称说明适用的控件
state_pressed是否按下按钮Button
state_checked是否勾选复选框CheckBox、单选按钮RadioButton
state_focused是否获取焦点文本编辑框EditText
state_selected是否选中各控件通用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"
><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="默认点击样式"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="自定义点击样式"android:background="@drawable/button_click_selector"/></LinearLayout>

2.选择按钮

按钮继承关系示意图

CompoundButtom在XML文件中主要使用以下属性:

  • checked:指定勾选状态。默认不勾选,true表示勾选,false表示未勾选。
  • button:指定勾选框图标样式。如果不指定则使用系统默认图标。

CompoundButton在Java代码中主要使用以下4种方法:

  • setChecked:设置勾选状态。
  • setButtonDrawable:设置左侧勾选状态图标样式。
  • setOnCheckedChangeListener:设置勾选状态变化的监听器。
  • isChecked:判断按钮是否勾选。

2.1 复选框CheckBox

继承自CompoundButtom类,可使用CompoundButtom属性。

2.2 开关按钮Switch

继承自CompoundButtom类,可使用CompoundButtom属性。

相比CompoundButton增加的XML属性
名称说明
textOn设置右侧开启时的文本(需要启用showText属性)
textOff设置左侧关闭时的文本(需要启用showText属性)
track设置开关轨道的背景
thumb设置开关标识的图标

2.3 单选按钮RadioButton

继承自CompoundButtom类,可使用CompoundButtom属性。

单选按钮要在一组按钮中选择其中一项,并且不能多选,这要求有个容器确定这组按钮的范围,这个容器便是单选组RadioGroup。

RadioGroup实质上是个布局,继承自LinearLayout。同一组RadioButton都要放在同一个RadioGroup节点下。除了RadioButton,也允许放置其他控件。

二者区别:

RadioGroup支持管理单选按钮的功能,而线性布局不具备该功能。

RadioGroup默认垂直布局,而LinearLayout默认水平布局。

判断哪个RadioButton被选中,通常是监听RadioGroup。而不是监听RadioButton。以下是RadioGroup常用的3个方法:

  • check:选中指定资源编号的单选按钮。
  • getCheckdRadioButtonId:获取选中状态单选按钮的资源编号,即R.id。
  • setOnCheckedChangeListener:获取单选按钮勾选变化的监听器。

3.文本输入

3.1 编辑框EditText

EditText继承自TextView。可使用TextView的各种属性。

EditText的getText()返回的是Editable,而不是String,如果想要输出文本,需要toString()转换一下。

相比TextView,EditText新增的XML属性。

  • inputType:指定输入的文本类型,输入类型的取值说明见下表,若同时使用多种文本类型,则可是使用竖线“|”把多种文本类型拼接起来。
输入文本类型
输入类型说明
text文本
textPassword文本密码。显示时用圆点"."代替
number整数型
numberSigned带符号的数字。允许在开头带符号"-"
numberDecimal带小数点的数字
numberPassword数字密码。显示时用圆点"."代替
datetime时间日期格式。除了数字外,还允许输入横线,斜杠,空格,冒号
date日期格式。除了数字外,还允许输入横线"-"和斜杠"/"
time时间格式。除了数字外,还允许输入冒号":"
  • maxLength:文本允许输入的最大长度。
  • hint:提示文本的内容。
  • textColorHint:提示文本的颜色。

3.2 焦点变量监听器

编辑框点击两次后才会触发点击事件。第一次点击只触发焦点变更事件,第二次点击才触发点击事件。

若要判断是否切换编辑框输入,应当监听焦点变更事件,而非监听点击事件。

调用编辑框对象的setOnFoucusChangeListener方法,即可在光标切换之时(获得光标和失去光标)触发焦点变更事件。

//请求焦点,即将光标返回到当前控件
void requestFocus();//使用方法
控件名称.requestFocus();

3.3 文本变化监听器

文本编辑框达到指定长度自动关闭软键盘,此时要注册文本变化监听器。主要有两个功能点:

  • 如何关闭软键盘。
  • 如何判断已输入的文字达到指定位数。

调用编辑框对象的addTextChangedListener方法注册文本监听器。

文本监听器的接口名称为TextWacher,该接口提供了3个监听方法:

  • beforeTextChanged:在文本改变之前触发。
  • onTextChanged:在文本改变过程中触发。
  • afterTextChanged:在文本改变之后触发。

文本监听器使用方法。先使用下面功能函数,然后使用Alt键+回车键,自动补全监听器类函数。注意传递参数。

//1.设置监听 et_number和et_password是创建的控件,HideTextWatcher是自定义的私有类
et_number.addTextChangedListener(new HideTextWatcher(et_number,11));
et_password.addTextChangedListener(new HideTextWatcher(et_password,6));
//2.此功能函数在onCreate函数外面private class HideTextWatcher implements TextWatcher {//声明变量,用来接收外部传来的控件和变量private EditText m_et;private int m_maxLength;public HideTextWatcher(EditText editText, int maxLength) {this.m_et = editText;this.m_maxLength = maxLength;}@Overridepublic void afterTextChanged(Editable s) {//如果当前文本编辑框输入的内容和设置的最大长度一致,则隐藏软件盘if(m_et.length() == m_maxLength){Utils.HideInputMethod.hideOneInputMethod(LoginActivity.this,m_et);}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}}

4.对话框

4.1 编辑对话框AlertDialog

AlertDialog可以完成常见的交互操作,例如提示、确认、选择等功能。

AlertDialog借助建造器AlertDialog.Builder才能完成参数设置。AlertDialog.Builder的常用方法说明如下:

  • secIcon:设置对话框的标题图标。
  • setTitle:设置对话框的标题文本。
  • setMessage:设置对话框的内容文本。
  • setPositiveButton:设置肯定按钮的信息,包括按钮文本和点击监听器。
  • setNegativeButton:设置否定按钮的信息,包括按钮文本和点击监听器。
  • setNeutralButton:设置中性按钮的信息,包括按钮文本和点击监听器,该方法比较少用。
    //创建一个AlertDialog对话框建造器AlertDialog.Builder builder = new AlertDialog.Builder(this);//设置对话框内容和样式builder.setTitle("这是一个注册提示框");builder.setMessage("是否需要注册新账号?");builder.setPositiveButton("是", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {tv_show_number.setText("确认注册");}});builder.setNegativeButton("我再想想",new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {tv_show_number.setText("取消注册");}});AlertDialog dialog = builder.create();dialog.show();

通过AlertDialog.Builder设置完对话框参数,还需要调用建造器的create方法生成对话框示例,再调用对话框实例的show方法,在页面上弹出提醒对话框。

/根据建造器构建提醒对话框对象
AlertDialog dialog = builder.create();
//显示提醒对话框
dialog.show();

4.2 日期对话框DatePickerDialog

主要有两种:DatePicker(控件)DatePickerDialog(对话框)

虽然EditText提供了inputType="date"的日期输入,但是很少有人会手工输入完整日期,况且EditText还不支持"年**月**日"这样的中文日期,所以系统提供了专门的日期选择器DatePicker,供用户选择具体的年月日。不过,DatePicker并非弹窗模式,而是在当前页面占据一块区域,并且不会自动关闭。按习惯来说,日期控件应该弹出对话框,选择完日期就要自动关闭对话框。因此很少直接在界面上显示DatePicker,而是利用已经封装好的日期选择对话框DatePickerDialog

DatePickerDialog相当于在AlertDialog上装载了DatePicker,编码时只需调用构造方法设置当前的年、月、日。然后调用show方法即可弹出日期对话框。日期选择事件则是由监听器OnDateSetListener负责响应,在该监听器的onDateSet方法中,开发者获取用户选择的具体日期,再做后续处理。特别注意onDateSet的月份参数,他的起始值不是1而是0。也就是说,一月份对应的参数值为0,十二月份对应的参数值为11,中间月份的数值以此类推。

DatePick控件XML属性

//用于显示日期控件的显示方式 滚轮显示还是日历形式
andorid:datePickerMode
//用于确认是否带日历表
android:calendarViewShown

DatePickerDialog日期对话框创建接口

public DatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener listener,int year, int month, int dayOfMonth)
//显示对话框
public void show()
//获取日历实例
Calendar calendar = Calendar.getInstance();
//创建日期对话框
DatePickerDialog dateDialog = new DatePickerDialog(this,this,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)
);//月份从0开始
dateDialog.show();

获取当前时间Calendar类

//获取日历实例
Calendar calendar = Calendar.getInstance();
//获取年
calendar.get(Calendar.YEAR)
//获取月
calendar.get(Calendar.MONTH)
//获取日
calendar.get(Calendar.DAY_OF_MONTH)
//获取时
calendar.get(Calendar.HOUR_OF_DAY)
//获取分
calendar.get(Calendar.MINUTE)
//获取秒
calendar.get(Calendar.SECOND)

4.3 时间对话框TimePickerDialog

主要有两种:TimePicker(控件)TimePickerDialog(对话框)

TimePicker属性

//滚轮模式和时钟模式切换
android:timePickerMode<attr name="timePickerMode"><!-- Time picker with spinner controls to select the time. --><enum name="spinner" value="1" /><!-- Time picker with clock face to select the time. --><enum name="clock" value="2" /></attr>
//timePicker设置24小时制和12小时制切换
public void setIs24HourView(@NonNull Boolean is24HourView)

TimePickerDialog创建

方式一
public TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute,boolean is24HourView)方式二
public TimePickerDialog(Context context, int themeResId, OnTimeSetListener listener,int hourOfDay, int minute, boolean is24HourView)
//对话框需要调用show显示
public void show()
//使用示例
//获取日历实例
Calendar calendar = Calendar.getInstance();
//创建时间选择对话框
TimePickerDialog timeDialog = new TimePickerDialog(this,this,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true
);
timeDialog.show();

5 自动消失提示框

Toast类 是一个视图(View),包含给用户的简短消息。Toast 类帮助你创建和显示这些消息。当视图显示给用户时,它会作为悬浮视图出现在应用程序上方。它永远不会获得焦点。用户可能正在输入其他内容。这种设计的目的是尽量不打扰用户,同时仍然向用户显示你希望他们看到的信息。例如音量控制,和显示设置已保存的简短消息。使用此类最简单的方法是调用静态方法之一,该方法构建所需的一切并返回一个新的 Toast 对象。请注意,当应用处于前台时,Snackbar 更适合显示简短消息。请注意,从后台发送的 toast 有速率限制,因此避免快速连续发送此类 toast。从 Android 12(API 级别 31)开始,针对 Android 12 或更高版本的应用,其 toast 会限制为两行。

创建接口

    /*** Make a standard toast that just contains text.** @param context  The context to use.  Usually your {@link android.app.Activity} object.* @param text     The text to show.  Can be formatted text.* @param duration How long to display the message.  Either {@link #LENGTH_SHORT} or*                 {@link #LENGTH_LONG}**/public static Toast makeText(Context context, CharSequence text, @Duration int duration)
//使用示例
Toast.makeText(this,"请输入11位电话号码", Toast.LENGTH_SHORT).show();

    http://www.dtcms.com/a/550623.html

    相关文章:

  • 公司网站升级改版方案wordpress 一级目录
  • Rust 日志级别与结构化日志:从调试到生产的日志策略
  • 建英文网站有用吗自动外链发布工具
  • 从BSP到DFP和RTOS---专业的嵌入式开发工具Keil备忘
  • 【SpringBoot从初学者到专家的成长25】认识SpringBoot中的Spring Expression Language (SpEL)
  • IntelliJ IDEA配置Tomcat教程
  • 北京做网站建设的公司排名网页qq登陆保护在哪里
  • 广东省网站集约化建设做外贸如何建立网站
  • Rust 中的 if let 与 while let 语法糖:简化模式匹配的优雅工具
  • 基于GBR原理的叠腮技术生物学基础
  • 网站备案找哪个部门制作一个网站能多少钱
  • 汕头站扩建进展成都开发小程序的公司
  • 保健品 东莞网站建设欧米茄表官方官网
  • 郑州网站建设彳汉狮网络在线制图网
  • Rust Vec 的内存布局与扩容策略:从底层实现到性能优化
  • Hive 分区表变更字段长度不生效
  • 成都企业网站怎么做广东网络推广项目
  • 沈阳网站建设公司怎么样服装店的营销方法
  • 网站建设网络科技公司加盟水区建设局网站
  • 【企业SRE/DevOps向的精通Linux课程培训课程】第 18 天:Web 服务器(Apache、Nginx、反向代理)
  • 电商网站免费设计有关网站建设新闻资讯
  • 常用链地址 区块链常用浏览器地址
  • 手机网站推荐哪些提升关键词优化排名软件
  • 东莞网站建设 烤活鱼三门峡网站建设推广
  • csapp实验一:datalab
  • 两个不同git仓库,如何合并1个git仓库的提交到另1个仓库?
  • 南通网站建设top公司邮箱怎么申请的
  • 网站建设 数据上传 查询歌曲网站源码
  • Kubernetes 常见问题全解析
  • 网站建设合同有哪些杭州小程序开发