Android 常用控件(四)

这篇博客介绍了Android中常用的进度条控件ProgressBar的样式和使用方法,包括如何通过代码控制其可见性。接着讲解了SeekBar的拖动功能和RatingBar的评分功能,详细阐述了这两个控件的属性、监听事件及方法,如设置星数、获取评分等。
摘要由CSDN通过智能技术生成

1.ProgressBar进度条
progressBar进度条是一个显示进度的控件,Android提供了两大类进度条样式,长形进度条样式progress-BarStyleHorizontal和圆形进度条progressBarStyleLarge.

常用方法:
这里写图片描述
这里写图片描述

<ProgressBar 
    android:id="@+id/pb"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    //默认是圆形进度条,可以知道样式设置为水平进度条
    style="?android:attr/progressBarStyleHorizontal"/>
    //指定成水平进度条后,我们还可以通过 android:max属性给进度条设置一个最大值,然后在代码中动态地更改进度条的进度
    android:max="100"

如何才能让进度条在数据加载完成时消失呢,这里我们就需要用一开始所讲的Android 控件的可见属性。
可以通过代码来设置控件的可见性,使用的是 setVisibility()方法,可以传入 View.VISIBLE、View.INVISIBLE 和 View.GONE 三种值。

下面实现点击一下按钮让进度条消失,再点击一下按钮让进度条出现的这种效果,这里只给出按钮监听的代码:

button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过 getVisibility()方法来判断 ProgressBar 是否可见
                if (progressBar.getVisibility() == View.GONE) {
                    progressBar.setVisibility(View.VISIBLE);
                } else {
                    progressBar.setVisibility(View.GONE);
                }
            }
        });

关于TextView中文字单独在一行显示的时候实现跑马灯的方法

<TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextViewTextViewTextViewTextViewTextViewTextViewTextViewTextView" 
        //主要是以下5个
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode ="true"
        android:singleLine="true" />

2.ANR+Handler

//ANR :application not responsing应用程序无响应
    //why:因为在主线程中执行了 耗时的操作
    //how:把耗时的操作 写到子线程中
    public void start(View view){
        new MyThread().start();
    }

    Handler handler=new Handler(){
        //接受消息,并更新UI
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //接受消息
            int i=msg.what;
//            更新UI
            tv_progress_num.setText(i+"%");
        }
    };


    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            for (int i = 0; i <=100 ; i++) {
                progressBar.setProgress(i);
                //发消息
                handler.sendEmptyMessage(i);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

3.Toggle按钮开关

<ToggleButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOn="关"//关闭状态显示文本
        android:textOff="开"//打开状态显示文本
        android:id="@+id/tb_off"
        android:layout_weight="0.3"
        />

监听事件:

tb_off.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    iv_sb.setImageAlpha(255);
                }
                else{
                    iv_sb.setImageAlpha(0);
                }
            }
        });

4.Switch拨动开关

<Switch
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:id="@+id/sw_on"
        />

监听事件:

sw_on.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    Toast.makeText(MainActivity.this, "开了嘞", Toast.LENGTH_SHORT).show();
                }
                else{
                    Toast.makeText(MainActivity.this, "关了哦", Toast.LENGTH_SHORT).show();
                }
            }
        });

5. SeekBar拖动条
SeekBar是ProgressBar的扩展,在其基础上增加了一个可滑动的滑片(注:就是那个可拖动的图标)。用户可以触摸滑片并向左或向右拖动,再或者可以使用方向键都可以设置当前的进度等级。不建议把可以获取焦点的widget放在SeekBar的左边或右边。

SeekBar可以附加一个SeekBar.OnSeekBarChangeListener以获得用户操作的通知。
常用属性:
这里写图片描述

<SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:max="255"//最大值
        android:id="@+id/sb_jdt"
        android:background="#6ad1f6"
        />

拖动实现透明度增减

sb_jdt.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                iv_sb.setImageAlpha(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

6.RatingBar评分条
RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator),其中大的只适合指示,不适合于用户交互。

当使用可以支持用户交互的RatingBar时,无论将控件(widgets)放在它的左边还是右边都是不合适的。

只有当布局的宽被设置为wrap content时,设置的星星数量(通过函数setNumStars(int)或者在XML的布局文件中定义)将显示出来(如果设置为另一种布局宽的话,后果无法预知)。

次级进度一般不应该被修改,因为他仅仅是被当作星型部分内部的填充背景。

常用属性:
这里写图片描述

<RatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="6"//多少星星
        android:rating="2.5"//默认多少颗
        android:stepSize="0.5"//每次递增减多少颗
        android:id="@+id/rb_star"
        android:layout_marginTop="20dp"
        android:layout_gravity="center"
        />

实现监听

rb_star.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
                Toast.makeText(MainActivity.this, String.valueOf(rating)+"分", Toast.LENGTH_SHORT).show();
            }
        });

预览效果:
这里写图片描述

常用方法:
(1) public int getNumStars ()

返回显示的星型数量

返回值: 显示的星型数量

(2)public RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener ()

返回值

监听器(可能为空)监听评分改变事件

(3)public float getRating ()

获取当前的评分(填充的星型的数量)

返回值

当前的评分

(4)public float getStepSize ()

获取评分条的步长

返回值

The step size.

步长

(5)public boolean isIndicator ()

返回值

                        判断当前的评分条是否仅仅是一个指示器(注:即能否被修改)

(6)public void setIsIndicator (boolean isIndicator)

设置当前的评分条是否仅仅是一个指示器(这样用户就不能进行修改操作了)

参数

isIndicator Bool值,是否是一个指示器

(7)public synchronized void setMax (int max)

设置评分等级的范围,从0到max

参数

max 评分条最大范围。

(8)public void setNumStars (int numStars)

设置显示的星型的数量。为了能够正常显示它们,建议将当前widget的布局宽度设置为wrap content

参数

numStars 星型的数量

(9)public void setOnRatingBarChangeListener (RatingBar.OnRatingBarChangeListener listener)

设置当评分等级发生改变时回调的监听器

参数

listener 监听器

(10)public void setRating (float rating)

设置分数(星型的数量)

参数

rating 设置的分数

(11)public void setStepSize (float stepSize)

设置当前评分条的步长(step size)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值