欢迎光临散文网 会员登陆 & 注册

UI编程基础

2021-07-06 09:28 作者:独行D暗灵  | 我要投稿

Android UI元素

构成

  1. 视图(View)

  2. 视图容器(ViewGroup)

  3. 布局管理(Layout)

  4. Activity

  5. 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属性有三类:

    1. 组件本身的XML属性;(android:inputtype)

    2. 组件祖先类(View)的XML属性;(android:id)

    3. 组件所属容器的布局参数。(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>

  1. 列可以同时具备stretchColumns和shrinkColumns属性;当该列的内容比较多时,将以“多行”方式显示其内容。

  2. 由于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类似)

    1. App:layout_constraintLeft_toLeftOf

    2. App:layout_constraintLeft_toRightOf

    3. App:layout_constraintRight_toRightOf

    4. App:layout_constraintRight_toLeftOf

    5. App:layout_constraintTop_toTopOf

    6. App:layout_constraintTop_toBottomOf

    7. App:layout_constraintBottom_toBottomOf

    8. 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//垂直方向上比重,类似线性布局

基于监听的事件处理

三个事件模型

  1. 事件

  2. 事件源

  3. 事件监听器


事件监听器

事件监听器接口事件功能描述OnClickListener单击事件当用户点击某个组件或者方向键触发该事件OnFocusChangeListener焦点事件当组件获得或者失去焦点时触发该事件OnKeyListener按键事件当用户按下或者释放设备上的某个按键触发该事件OnTouchListener触摸事件当触碰屏幕时触发该事件OnCreateContextMenuListener创建上下文菜单事件当创建上下文菜单时触发该事件OnCheckedChangeListener选项改变事件当选择改变时触发该事件


实现监听器的四种形式

  1. Activity本身作为事件监听器︰通过Activity实现监听器接口,并实现事件处理方法

  2. 匿名内部类形式︰使用匿名内部类创建事件监听器对象

  3. 内部类或外部类形式∶将事件监听类定义为当前类的内部类或普通的外部类

  4. 绑定标签∶在布局文件中为指定标签绑定事件处理方法


监听事件的处理

  1. 实现基于监听的事件处理步骤

  2. 在事件处理方法中编写事件处理代码

  3. 在相应的组件上注册监听器


  • 通过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个属性

    1. android:isIndicator RatingBar的指示是否起作用,默认为false,如果为true ,RatingBar的进度不能被人为修改。

    2. android:numStars显示星星的总数量,必须为整数。

    3. android:rating设置默认评分值,值为浮点数。

    4. 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) {
             //...
         }
     });
     



    UI编程基础的评论 (共 条)

    分享到微博请遵守国家法律