UI编程基础
Android UI元素
视图(View)
视图容器(ViewGroup)
布局管理(Layout)
Activity
Fragment
视图
View视图组件是用户界面的基础元素。
View对象是Android屏幕上一个特定的矩形区域的布局和内容属性的数据载体,通过View对象可实现布局、绘图、焦点变换、滚动条、屏幕区域的按键、用户交互等功能。
Android应用的绝大部分UI组件都放在android.widget包及其子包中,所有这些UI组件都继承View类。
View的常见子类及功能
类名功能描述TextView文本视图EditText编辑文本框Button按钮Checkbox复选框RadioGroup单选按钮组Spinner下拉列表AutoCompleteTextView自动完成文本框DataPicker日期选择器TimePicker时间选择器DigitalClock数字时钟AnalogClock模拟时钟ProgessBar进度条RatingBar评分条SeekBar搜索条GridView网格视图ListView列表视图ScrollView滚动视图
视图容器
ViewGroup类通常作为其他组件的容器使用。
ViewGroup是View的子类,可以当成View使用。
View组件可以添加到ViewGroup中,一个ViewGroup也可以添加到另一个ViewGroup中。
ViewGroup类提供的主要方法
类名功能描述ViewGroup()构造方法void addView(View view)用于添加子视图,以View作为参数,将该View增加到视图组中removeView(View view)将指定的View从视图组中移除updateViewLayout(View view,ViewGroup.LayoutParams params)用于更新某个View的布局void bringChildToFront(View child)将参数所指定的视图移动到所有视图之前显示boolean clearChildFocus(View child)清除参数所指定的视图的焦点boolean dispatchKeyEvent(KeyEvent event)将参数所指定的键盘事件boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event)将参数所指定的键盘事件分发给当前焦点路径的视图boolean dispatchSetSelected(boolean selected)为所有的子视图调用setSelected()方法
ViewGroup继承了View类,虽然可以当成普通的View来使用,但习惯上将ViewGroup当容器来使用。由于ViewGroup是一个抽象类,在实际应用中通常使用ViewGroup的子类作为容器,例如各种布局管理器。
ViewGroup的继承者大部分位于android.widget包中。
Android布局文件中,每个组件所能使用的XML属性有三类:
组件本身的XML属性;(android:inputtype)
组件祖先类(View)的XML属性;(android:id)
组件所属容器的布局参数。(android:layout_width)
ViewGroup容器使用两个内部类来控制子组件在其中的分布位置:
ViewGroup.LayoutParams
ViewGroup.MarginLayoutParams
由于LayoutParams也具有继承关系,因此LinearLayout的子类除了可以使用LinearLayout.LayoutParams所提供的XML属性外,还可以使用其祖先类ViewGroup.LayoutParams的XML属性。
布局管理
布局管理器可以根据运行平台来调整组件的大小
布局管理器本身是一种UI组件,所有布局管理器都是ViewGroup的子类,所有布局都可以作为容器使用
Android常用的布局:
LinearLayout(线性布局)
RelativeLayout(相对布局)
TableLayout(表格布局)
AbsoluteLayout(绝对布局)
ConstraintLayout(约束布局)
Fragment
Fragment允许将Activity拆分成多个完全独立的可重用的组件,每个组件具有自己的生命周期和UI布局
Fragment可以灵活地为不同大小屏幕地设备创建UI界面
每个Fragment都是一个独立的模块,并与绑定的Activity紧密的联系在一起
一个Fragment可以被多个Activity所共用
界面布局
两种布局方式
在XML布局文件中声明(推荐)
在程序中直接实例化布局及其组件
常见的Android布局
LinearLayout
RelativeLayout
TableLayout
AbsoluteLayout
线性布局
LinearLayout是线性布局,布局中的组件按照垂直或者水平方向进行排列
XML属性对应方法功能描述android:dividersetDividerDrawable()设置垂直布局时两个按钮之间的分隔条android:gravitysetGravity()设置布局管理器内组件的对齐方式android:orientationsetOrientation()设置布局管理器内组件的排列方式
LinearLayout中子元素的位置都受LinearLayout.LayoutParams控制
XML属性功能描述android:layout_gravity指定子元素在LinearLayout中的对齐方式android:layout_weight指定子元素在LinearLayout中所占的比重
线性布局不会换行,当组件顺序排列到屏幕边缘时,剩余的组件不会被显示
示例
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertioal"
android:gravity="center">
</LinearLayout>
表格布局
TableLayout类似表格形式,以行和列的方式来布局子组件
在TableLayout中,可以通过以下3种方式对单元格进行设置:
Shrinkable
Stretchable
Collapsed
XML属性对应方法功能描述android:shrinkColumnssetShrinkAllColumns(boolean)设置可收缩的列android:stretchColumnssetStretchAllColumns(boolean)设置可伸展的列android:collapseColumnssetColumnCollapsed(int,boolean)设置要隐藏的列
全局属性的设置
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="0"
android:shrinkColumns="1,2">
</TableLayout>
列可以同时具备stretchColumns和shrinkColumns属性;当该列的内容比较多时,将以“多行”方式显示其内容。
由于TableLayout继承了LinearLayout,因此完全支持LinearLayout所支持的全部XML属性。
使用TableRow.LayoutParams对TableRow的子元素进行修饰
XML属性功能描述android:layout_column指定该单元格在第几列显示android:layout_span指定该单元格占据的列数
属性设置
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="0"
android:shrinkColumns="1,2">
<TableRow>
<Button android:layout_span="2" />
<Button android:layout_column="1" />
</TableRow>
</TableLayout>
相对布局
在相对布局容器中子组件的位置总是相对于兄弟组件或父容器
XML属性功能描述android:layout_toLeftOf控制该组件位于指定ID组件的左侧android:layout_toRightOf控制该组件位于指定ID组件的右侧android:layout_above控制该组件位于指定ID组件的上方android:layout_below控制该组件位于指定ID组件的下方android:layout_alignLeft控制该组件与指定ID组件的左边界进行对齐android:layout_alignTop控制该组件与指定ID组件的上边界进行对齐android:layout_alignRight控制该组件与指定ID组件的右边界进行对齐android:layout_alignBottom控制组件与指定ID组件的下面边界对齐
在相对布局容器中子组件的位置总是相对于兄弟组件或父容器
XML属性功能描述android:layout_alignParentLeft指定该组件是否与布局容器左对齐android:layout_alignParentTop指定该组件是否与布局容器顶端对齐android:layout_alignParentRight指定该组件是否与布局容器右对齐android:layout_alignParentBottom指定该组件是否与布局容器底端对齐android:layout_centerInParent指定该组件是否位于布局容器的中央位置android:layout_centerHorizontal指定该组件是否位于布局容器的水平居中android:layout_centerVertical指定该组件是否位于布局容器的垂直居中
示例
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
相对布局
AbsoluteLayout通过指定组件的确切X、Y坐标来确定组件的位置
四大控制属性
XML属性功能描述android:layout_width组件宽度android:layout_height组件高度android:layout_x设置组件的X坐标android:layout_y设置组件的Y坐标
通过AbsoluteLayout实现绝对布局
<AbsoluteLayout android:id="@+id/AbsoluteLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button android:text="A"
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="10dp"
android:layout_y="20dp">
</Button>
</AbsoluteLayout>
约束布局
约束布局ConstraintLayout是一个ViewGroup,可以在API9以上的Android系统使用,主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。
从Android Studio 2.3起,官方的模板默认使ConstraintLayout。
ConstraintLayout布局优势:
ConstrainLayout使用起来比RelativeLayout更灵活,性能更出色。
ConstrainLayout可以按照比例约束控件位置和尺寸,能够更好地适配屏幕大小不同的机型。
ConstraintLayout位置控制
8个边界控制属性(用法跟RelativeLayout类似)
App:layout_constraintLeft_toLeftOf
App:layout_constraintLeft_toRightOf
App:layout_constraintRight_toRightOf
App:layout_constraintRight_toLeftOf
App:layout_constraintTop_toTopOf
App:layout_constraintTop_toBottomOf
App:layout_constraintBottom_toBottomOf
App:layout_constraintBottom_toTopOf
ConstraintLayout位置控制
<!--如下图,左边一个A,右边一个c,如果想新建一个B在A c之间,代码如下-->
<Button
App : layout_constraintLeft_toRightOf="@+id/bt_a"
App : layout_constraintRight_toLeftOf="@+id/bt_c"
android : layout_width="wrap_content"
android: layout_height="wrap_content"
android : text="B"/>
<!--字面理解:1.我最左边的位置,在button A的右边--><!--字面理解:2.我最右边的位置,在button c的左边-->
偏移
layout_constraintHorizontal_bias (水平方向偏移)(范围o-1)
layout_constraintVertical_bias(垂直方向偏移)(范围o-1)
大小
layout_constraintHorizontal_weight//水平方向上比重,类似线性布局
layout_constraintVertical_weight//垂直方向上比重,类似线性布局
基于监听的事件处理
三个事件模型
事件
事件源
事件监听器
事件监听器
事件监听器接口事件功能描述OnClickListener单击事件当用户点击某个组件或者方向键触发该事件OnFocusChangeListener焦点事件当组件获得或者失去焦点时触发该事件OnKeyListener按键事件当用户按下或者释放设备上的某个按键触发该事件OnTouchListener触摸事件当触碰屏幕时触发该事件OnCreateContextMenuListener创建上下文菜单事件当创建上下文菜单时触发该事件OnCheckedChangeListener选项改变事件当选择改变时触发该事件
实现监听器的四种形式
Activity本身作为事件监听器︰通过Activity实现监听器接口,并实现事件处理方法
匿名内部类形式︰使用匿名内部类创建事件监听器对象
内部类或外部类形式∶将事件监听类定义为当前类的内部类或普通的外部类
绑定标签∶在布局文件中为指定标签绑定事件处理方法
监听事件的处理
实现基于监听的事件处理步骤
在事件处理方法中编写事件处理代码
在相应的组件上注册监听器
通过Activity实现监听器接口,并实现该接口中对应的事件处理方法
基于监听的事件的处理模型的编程步骤:
基于监听的事件的处理模型的编程步骤∶
实现事件监听器类
调用事件源的setXxxListener()方法,将事件监听器注册给事件源对象
通过Activity实现监听器接口
public class EvenBtnActivity extends Activity implements View.OnClickListener{
protected void onCreate(Bundle savedInstanceState){
clickBtn = (Button)findViewById(R.id.clickBtn);
clickBtn.setOnClickListener(this);
}
}
匿名内部类形式
为什么需要内部类?
由于大部分情况下事件只是临时使用一次,匿名内部类形式的事件监听器更合适。
内部类对象可以访问创建它的对象的实现,包括私有数据;
内部类不为同一包的其他类所见,具有很好的封装性;
使用内部类可以很方便的编写事件驱动程序;
匿名内部类可以方便的定义运行时回调;
内部类可以方便的定义
匿名内部类的使用
clickBtn = (Button)findViewById(R.id.clickBtn);
clickBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
showText.setText("匿名内部类:btn按钮被单击了!")
}
});
内部类、外部类形式
将事件监听器定义成当前类的内部类
使用内部类有以下优点:
可以在当前类中复用内部监听器类
可以访问当前类的所有界面组件
将事件监听器定义成当前类的内部类
protected void onCreate(Bundle savedInstanceState){
clickBtn.setOnClickListener(new ClickListener());
}
class ClickListener implements View.OnClickListener{
@Override
public void onClick(View v){
showTxt.setText("将事件监听器定义成当前类的内部类:btn按钮被单击了!");
}
}
绑定标签
event_tag.xml
<Button
android: id="@+id/ clickBtn"
android: layout_width="wrap_content"
android : layout_height="wrap_content"
android: onClick="cliokMe"
android: text="单击我"/>
BindTagActivity.java
public void clickMe (view v){
showTxt.setText ("绑定标签事件: btn按钮被单击了! ");
}
基于回调机制的事件处理
Android为View中提供了五种事件处理的回调方法︰
onKeyDown()
onKeyUp()
onTouchEvent()
onTrackBallEvent()
onFocusChanged()
onKeyDown()方法
public boolean onKeyDown (int keycode,KeyEvent event)
参数keyCode表示被按下的键值
参数event用于封装按键事件的对象
返回值为boolean类型
常量名功能描述KEYCODE_CALL拨号键KEYCODE_ENDCALL挂机键KEYCODE_HOME按键HomeKEYCODE MENU菜单键KEYCODE_BACK返回键KEYCODE_SEARCH搜索键KEYCODE_ CAMERA拍照键KEYCODE_FOCUS拍照对焦键KEYCODE_POWER电源键KEYCODE_NOTIFICATION通知键KEYCODE_MUTE话筒静音键KEYCODE_VOLUME_MUTE扬声器静音键KEYCODE_VOLUME_UP音量增加键KEYCODE_VOLUME_DOWN音量减小键KEYCODE_ CALL拨号键KEYCODE_ENDCALL挂机键
捕捉手机键盘被按下的事件
public boolean onKeyDown (int keyCode,KeyEvent event){
//重写的键盘按下监听
switch (keycode) {
case KeyEvent . KEYCODE_BACK:
showText.setText ("点击了【回退键】") ;break ;
case KeyEvent. KEYCODE_A:
showText.setText("点击了【A键】");break;
}
return true;
}
onKeyUp()方法
用来捕捉手机键盘按键抬起的事件
public boolean onkeyUp (int keyCode,KeyEvent event)
参数keyCode表示触发事件的按键码
参数event是一个事件封装类的对象
返回值为boolean类型
onTouchEvent()方法
用来处理手机屏幕的触摸事件
public boolean onTouchEvent (MotionEvent event)
参数event是手机屏幕触摸事件封装类的对象,用于封装件的相关信息
返回值为boolean类型
自定义的View并不会自动刷新,所以每次改变数据模型时都需要手动调用postInvalidate(方法进行屏幕的刷新操作。
处理手机屏幕的触摸事件
//重写的onTouchEvent回调方法override
public boolean onTouchEvent (MotionEvent event) {
switch (event.getAction () ){
case MotionEvent .ACTION_DOWN://手指按下
case MotionEvent . ACTION_MOVE://手指移动
case MotionEvent .ACTION_UP://手指抬起
}
return super.onTouchEvent (event);
}
onTrackBa llEvent()方法
用来处理手机中轨迹球事件
public Boolean onTrackballEvent (MotionEvent event)
轨迹球与手机键盘有一定区别
某些型号的手机设计出的轨迹球会比只有手机键盘时更美观
轨迹球使用更为简单
使用轨迹球会比键盘更为细化
在模拟器运行状态下,可以通过F6键打开模拟器的轨迹球,然后通过鼠标的移动来模拟轨迹球事件。
onFocusChanged()方法
焦点改变的回调方法
protected void onFocusChanged (Boolean gainFocus,int direction, Rect previouslyFocusedRect)
常见的焦点相关方法
方法功能描述setFocusable()用于设置View是否可以拥有焦点isFocusable()用于判断View是否可以拥有焦点setNextFocusDownId()用于设置View的焦点向下移动后获得焦点View的IDhasFocus()用于判断View的夫requestFocus()用于尝试让此View获得焦点isFocusableTouchMode()用于设置View是否可以在触摸模式下获得焦点,默认情况下不可用
焦点改变事件回调
//自定义Button
class FocusButton extends Button {
protected void onFocusChanged (boolean focused,int direction,Rect previouslyFocusedRect) {
//...
}
)
每按下一次按键,会调用两次onFocusChanged(方法,一次是某个按钮失去焦点时调用,第二次是另一个按钮获得焦点时调用。
Widget组件通用属性
Widget组件通用属性
属性名称功能描述android:id设置控件的索引android:layout_height设置布局高度android:layout_width设置布局宽度android:autoLink设置是否当文本为URL链接时,文本显示为可点击的链接android:autoText如果设置,将自动执行输入值的拼写纠正android:bufferType指定getTextO方式取得的文本类别android:capitalize设置英文字母大写类型。需要弹出输入法才能看得到android:cursorVisible设定光标为显示/隐藏,默认显示
TextView类的XML属性及描述
XML属性功能描述android:layout_alignParentLeft指定该组件是否与布局容器左对齐android:autoLink设置是否当文本为URL链接,文本显示为可点击的链接。android:autoText如果设置,将自动执行输入值的拼写纠正。android:digits设置允许输入哪些字符。android:drawableLeft在text的左边输出一个drawableandroid:drawablePadding设置text与drawable(图片)的间隔android:drawableRight在text的右边输出一个drawableandroid:drawableTop在text的正上方输出一个drawableandroid:ellipsize设置当文字过长时如何显示该控件android:gravity设置文本位置,例如如center表示文本将居中显示android:hint设置文本为空时显示的提示信息android:ems设置TextView的宽度为N个字符的宽度android:maxEms设置TextView的宽度为最长为N个字符的宽度android:minEms设置TextView的宽度为最短为N个字符的宽度android:maxLength限制显示的文本长度,超出部分不显示android:lines设置文本的行数android:maxLines设置文本的最大显示行数android:minLines设置文本的最小行数android:linksClickable设置链接是否可以点击android:lineSpacingExtra设置行间距android:lineSpacingMultiplier设置行间距的倍数android:numeric如果被设置,该控件将有一个数字输入法android:password以小点“.”显示文本android:phoneNumber设置为电话号码的输入方式android:scrollHorizontally设置文本超出TextView的宽度的情况下,出现横向滚动条android:selectAllOnFocus如果文本是可选的,使其获取焦点android:shadowColor指定文本阴影的颜色android:shadowDx设置阴影横向坐标开始位置android:shadowDy设置阴影纵向坐标开始位置android:shadowRadius设置阴影的半径android:singleLine设置单行显示android:text设置显示文本android:textAppearance设置文字外观android:textColor设置文本颜色android:textColorHighlight被选中文字的底色,默认为蓝色android:textColorHIint设置提示信息文字的颜色,默认为灰色android:textColorLink文字链接的颜色android:textScalex设置文字缩放,默认为1.0fandroid:textSize设置文字大小android:textStyle设置字形android:height设置文本区域的高度android:maxHeight设置文本区域的最大高度android:minHeight设置文本区域的最小高度android:width设置文本区域的宽度
在EditText中,常用的inputType属性值
属性值功能描述text普通文本,默认textCapCharacters字母大写textCapWords每个单词的首字母大写textAutoCorrect自动完成textMultiLine多行输入textNoSuggestions不提示textUri网址textEmailAddress电子邮件地址textEmailSubject邮件主题textShortmessage短讯textLongMessage长信息textPassword密码number数字numberSigned带符号数字格式numberDecimal带小数点的浮点格式phone拨号键盘datetime时间日期date日期键盘time时间键盘
Button类的常用方法
方法功能描述onKeyDown()当用户按键时,该方法被调用onKeyUp()当用户按键弹起后,该方法被调用onKeyLongPress()当用户保持按键时,该方法被调用onKeyMultiple()当用户多次按键时,该方法被调用invalidateDrawable()用于刷新Drawable对象onPreDraw()用于设置视图显示setOnKeyListener()用于设置按键监听器setOnClickListener()用于设置点击监听器onKeyDown()当用户按键时,该方法被调用
单选按钮和单选按钮组
RadioButton:单个圆形单选框
RadioGroup:容纳多个RadioButton的容器
同一个RadioGroup中,只能有一个RadioButton被选中不同的RadioGroup中,RadioButton互不影响
一个RadioGroup中至少有2个RadioButton
方法功能描述getCheckedRadioButtonld()获取被选中按钮的idclearCheck()清除选中状态check(int id)通过参数id来设置该选项为选中状态setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener listenre)在一个单选按钮组中,当该单选按钮勾选状态发生改变时所要调用的回调函数addView(View child,int index,ViewGroup.LayoutParams params)使用指定的布局参数添加一个子视图getText()用于获取单选框的值
开关控件
ToggleButton
XML属性对应方法功能描述android:checkedsetChecked(boolean)设置该按钮是否被选中android:textOffsetTextOff(CharSquence)设置按钮的状态关闭时所显示的文本androidtextOnsetTextOn(CharSquence)设置按钮的状态打开时所显示的文本android:switchMinWidthsetSwitchMin Width(int)设置开关的最小宽度android:textStylesetSwitchTypeface (Typeface , int)设置开关的文本风格android:typefacesetSwitchTypeface(Typeface)设置开关的文本的字体风格android:switchPaddingsetSwitchPadding(int)设置开关与标题文本之间的空白android:thumbsetThumbResource(int)使用自定义的Drawable来绘制开关的开关按钮android:tracksetTrackResource(int)使用自定义的Drawable来绘制开关的开关轨道
图片视图(ImageView)
继承自View组件
用于显示图像资源
XML属性对应方法功能描述android:adjustViewBoundssetAdjustViewBounds(boolean)是否保持宽高比android:cropToPaddingsetCropToPadding(boolean)截取指定区域是否使用空白代替android:maxHeightsetMaxHeight(int)设置View的最大高度android:maxWidthsetMaxWidth(int)设置View的最大宽度android:srcsetimageResource(int)设置ImageView所显示的Drawable对象android:scaleTypesetScaleType(ImageView.ScaleType)设置所显示的图片如何缩放或移动以适应ImageView的大小
实现页面的切换功能,可以使用ViewPager类;该类是Android Support Liberary中自带的一个附加包的一个类,用来实现屏幕间的切换。
Dialog对话框
4种对话框
AlertDialog提示对话框
ProgressDialog进度条对话框
DatePickerDialog日期对话框
TimePickerDialog时间对话框
AlertDialog提示对话框
AlertDialog继承自Dialog类
使用Builder内部类进行创建
可以包含一个标题、一个内容消息或者一个选择列表以及0至3个按钮。
方法功能描述void create()根据设置的属性,创建一个AlterDialogvoid show()根据设置的属性,显示已创建的AlterDialogAlterDialog.Builder setTitle()设置标题AlterDialog.Builder setIcon()设置标题的图标AlterDialog.Builder setMessage()设置标题的内容AlterDialog.Builder setCancelable()设置是否模态AlterDialog setPositiveButton()为对话框添加Yes按钮AlterDialog setNegativeButton为对话框添加No按钮
ProgressDialog进度对话框
ProgressDialog有两种显示方式∶
滚动的环状图标
带刻度的进度条
通过ProgressDialog.setProgressStyle()方法进行设置:
STYLE_HORIZONTAL———刻度滚动
STYLE_SPINNER——图标滚动,默认选项
ProgressBar进度条
ProgressBar继承于View类
ProgressBar常用属性
android:max:进度条的最大值
android:progress:进度条已完成进度值
android:progressDrawable :设置轨道对应的Drawable对象
android:indeterminate :如果设置成true,则进度条不精确显示进度
android:indeterminateDrawable :设置不显示进度的进度条的Drawable对象
android:indeterminateDuration :设置不精确显示进度的持续时间
android:secondaryProgress:二级进度条,类似于视频播放的一条是当前播放进度,—条是缓冲进度,前者通过progress属性进行设置!
ProgressBar对应于Java中的可调用方法
getMax():返回这个进度条的范围的上限
getProgress():返回进度
getSecondaryProgress():返回次要进度
incrementProgressBy(int diff)︰指定增加的进度
isIndeterminate()∶指示进度条是否在不确定模式下
setIndeterminate(boolean indeterminate):设置不确定模式下
ProgressBar的样式设定有两种
—种是通过组件属性设置
另一种是通过样式style进行设置
ProgressBar常见的几种样式
横向progressBarStyleHorizontal
横向Widget.ProgressBar.Horizontal
圆形progressBarStyleLarge
Android中Seekbar
Seekbar的几个重要属性
android:max设置值的大小.
android:thumb= “@drawable/”显示的那个可拖动图标,如果没有设置该参数则为系统默认,如果自己需要重新定义,则将自己需要的图标存放在资源目录/res/drawable下,然后调用即可.
android:thumbOffset 拖动图标的偏量值可以让拖动图标超过bar的长度.
android:progress设置seekbar当前的默认值,范围0到max之间.
android:secondaryProgress 用过的迅雷的都知道拖动图标随着当前的播放时间的走动而走动,同时我们也注意到了也有个缓冲看到的进度条,这个属性就是用来设置默认显示的值为多少,范围为0到max.
android:progressDrawable 当我们不想使用系统默认的SeekBar时可以自己定义一个,这个资源文件就是用来调用我们自己定义的Seekbar图标的一般是在drawable下建立一个.xml文件s用layer-list来组织这些图标.
一般在做到音频播放和音乐播放时,大多数都要用到seekbar
Android中RatingBar
RatingBar是ProgressBar的一个延伸,ProgressBar的进度一般由代码控制,RatingBar的进度可以拖拽来控制。
RatingBar的4个属性
android:isIndicator RatingBar的指示是否起作用,默认为false,如果为true ,RatingBar的进度不能被人为修改。
android:numStars显示星星的总数量,必须为整数。
android:rating设置默认评分值,值为浮点数。
android:stepSize评分每次增加的值(最小变化值),值为浮点数
一般类似于打车软件和订餐软件上的五星好评的UI均可以利用RatingBar完美实现这个效果。
RatingBar的系统样式有三种:
style=" ?attr/ ratingBarstyle"或
style="@style/widget .AppCompat.RatingBar" style="?attr/ ratingBarstyleIndicator"或
style="@style/widget.AppCompat.RatingBar.Indicator" style=" ?attr/ ratingBarstyleSmall"或
style="@style/widget.AppCompat.RatingBar.Small"小型样式
默认样式
默认样式
RatingBar的事件监听
ratingBar.setOnRatingBarChangeListener (newRatingBar . OnRatingBarChangeListener () {
@override
public void onRatingChanged (RatingBar ratingBar, float rating, boolean fromUser) {
//...
}
});