我们在手机的设置的开关会设置成一种很好看的形式:
其实这种组件只有开启和关闭两种形态,安卓专门有一种组件来设计这种开关:
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);
}
}
更多分享,关注我!