Android:<4>RatingBar、ToggleButton和Spinner的运用

我们在手机的设置的开关会设置成一种很好看的形式:

其实这种组件只有开启和关闭两种形态,安卓专门有一种组件来设计这种开关:

1、ToggleButton:

<ToggleButton
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:id="@+id/tgb_mylight"
        android:textOff=""
        android:background="@drawable/myicon"/>

设置宽和高都是基本操作,特殊的是textoff,这是设计关闭时候显示的文字,我这里设置空字符串,也就是不显示任何内容,当然有关闭就有打开,texton,打开就是显示打开时显示的文字;

这里的background我用了一个选择器,什么是选择器:

这就是,xml文件下面有一个<selector>里面可以填<item>,我们可以设置选择状态、鼠标滑过状态、点击状态等的响应效果,我这里设置两个,一个时关闭时显示一站图片, 打开时显示另一张图片;使用选择器只需要放在属性后面就可以了,形式就是加上@和文件相对路径;我这里就是放在了背景属性后面,所有就有下面的效果:

 这里的开关是可以打开和关闭的;

我这里做了逻辑处理,就是在开启开关后利用吐司显示“灯光已打开”,并且更换一张图片:

 //1.3 对组件进行监听
        tgb_mylight.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                //这里第一个参数表示事件源,第二个参数表示开关是否打开
                if(b){
                    iv_myimg.setImageResource(R.drawable.touon);
                    Toast.makeText(MainActivity.this, "灯光已打开", Toast.LENGTH_SHORT).show();
                }else{
                    iv_myimg.setImageResource(R.drawable.touoff);
                    Toast.makeText(MainActivity.this, "灯光已关闭", Toast.LENGTH_SHORT).show();
                }
            }
        });

 这里使用的是匿名内部类进行监听,可以看到onCheckedChanged()有两个参数,分别是开关按钮的事件源和按钮状态;

2、下面还有一排五角星,这个就是RatingBar,这个一般是用在用户评级页面:

<RatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:stepSize="0.5"
        android:rating="2"
        android:id="@+id/rb_mystars"
        style="?android:attr/smallIcon"
        android:numStars="8"/>

这里同样宽高属性,stepsize时步长,也就是一颗星星分成多少份,0.5就是在拖动鼠标的时候可以发现半颗星星的情况,当然你也可以在细分;

同样,我们也可以对其写响应的逻辑代码:

可以看到我们拖动鼠标可选择,并且后又一段文字显示,上面时分数:

 //1.4 对评价进行监听,并且用toast进行输出
        rb_mystars.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
                Toast.makeText(MainActivity.this, "您的评价为:"+v, Toast.LENGTH_SHORT).show();
            }
        });

onRatingChanged(),这个监听函数含有三个参数,同样,第一个是事件源,第二个是分数,第三个是状态。

3、最后一个下拉框:

这个在选择信息的时候经常用到,其实就是spinner: 

 <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/sp_myspinner"/>

别看这个就几个属性,这些数据可不是存在布局文件上,而是在我们经过逻辑处理填上去的:

  //2.1 创建一个列表
        String[] myclass={"物联网2003","安卓2003","人工智能2003","大数据"};
        //2.2 创建一个数据监听器
        ArrayAdapter<String> myadapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.activity_list_item,android.R.id.text1,myclass);
        //2.3 对下拉组件设置适配器
        sp_myspinner.setAdapter(myadapter);

这里有一个关于适配器的知识点,这个适配器就相当于我们的电脑主板和显示屏一样,我们需要通过显卡来驱动,同理,我们要在布局上显示数据就需要一个数据适配器来驱动我们的spinner来显示数据,所以我们实例化一个数据适配器对象,new ArrayAdapter<String>(MainActivity.this,android.R.layout.activity_list_item,android.R.id.text1,myclass);这里有三个参数,第一个时上下文,第二个和第三个是固定写法,复制粘贴即可,最后一个就是我们定义的数据。

讲完了,来看看我们的全部代码:

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开关选择头像!"
        android:textSize="30sp"
        android:layout_marginTop="30dp"
        android:layout_gravity="center"
        />
    <ToggleButton
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:id="@+id/tgb_mylight"
        android:textOff=""
        android:background="@drawable/myicon"/>
    <ImageView
        android:layout_width="300dp"
        android:layout_height="400dp"
        android:src="@drawable/touoff"
        android:id="@+id/iv_myimage"
        android:layout_gravity="center"/>

    <RatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:stepSize="0.5"
        android:rating="2"
        android:id="@+id/rb_mystars"
        style="?android:attr/smallIcon"
        android:numStars="8"/>

    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/sp_myspinner"/>
</LinearLayout>

逻辑代码:

package com.example.mylight3avtivity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

    //1.1 定义组件变量
    ImageView iv_myimg;
    RatingBar rb_mystars;
    ToggleButton tgb_mylight;
    Spinner sp_myspinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.2 初始化组件变量
        iv_myimg=findViewById(R.id.iv_myimage);
        rb_mystars=findViewById(R.id.rb_mystars);
        tgb_mylight=findViewById(R.id.tgb_mylight);
        sp_myspinner=findViewById(R.id.sp_myspinner);
        //1.3 对组件进行监听
        tgb_mylight.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                //这里第一个参数表示事件源,第二个参数表示开关是否打开
                if(b){
                    iv_myimg.setImageResource(R.drawable.touon);
                    Toast.makeText(MainActivity.this, "灯光已打开", Toast.LENGTH_SHORT).show();
                }else{
                    iv_myimg.setImageResource(R.drawable.touoff);
                    Toast.makeText(MainActivity.this, "灯光已关闭", Toast.LENGTH_SHORT).show();
                }
            }
        });
        //1.4 对评价进行监听,并且用toast进行输出
        rb_mystars.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
                Toast.makeText(MainActivity.this, "您的评价为:"+v, Toast.LENGTH_SHORT).show();
            }
        });

        //2.1 创建一个列表
        String[] myclass={"物联网2003","安卓2003","人工智能2003","大数据"};
        //2.2 创建一个数据监听器
        ArrayAdapter<String> myadapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.activity_list_item,android.R.id.text1,myclass);
        //2.3 对下拉组件设置适配器
        sp_myspinner.setAdapter(myadapter);
    }
}

更多分享,关注我!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程学渣ズ

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值