2、进度条 Progressbar
属性名 | 描述 |
---|---|
android:animationResolution | 超时的动画帧之间的毫秒;必须是一个整数值,如"100"。 |
android:indeterminate | 超时的动画帧之间的毫秒;必须是一个整数值,如"100"。 |
android:indeterminateBehavior | 定义当进度达到最大时,不确定模式的表现;该值必须为repeat或者cycle,repeat表示进度从0重新开始; cycle表示进度保持当前值,并且回到0 |
android:indeterminateDrawable | 定义不确定模式是否可拉 |
android:indeterminateDuration | 时间不定的动画 |
android:indeterminateOnly | 限制为不定模式 |
android:max | 定义进度的最大值 |
android:maxHeight | 进度Widget最大高 |
android:minHeight | 进度Widget最小高 |
android;maxWidth | 进度Widget最大宽 |
android:minWidth | 进度Widget最小宽 |
android:mirrorForRtl | 定义了相关画板如果需要反映在RTL模式 |
android:progress | 设置进度的默认值,值介于0到max之间 |
android:secondaryProgress | 定义二级进度值,值介于0到max。该进度在主进度和背景之间。比如用于网络播放视频时,二级进度用于表示缓冲进度,主进度用于表示播放进度。 |
android:progressDrawable | 自定义drawable显示 |
android:interpolator | 设置动画速度 |
进度条样式:
@android:style/Widget.ProgressBar.Horizontal:水平进度条(可以显示刻度,常用)。
@android:style/Widget.ProgressBar.Small:小进度条。
@android:style/Widget.ProgressBar.Large:大进度条。
@android:style/widget.ProgressBar.Inverse:不断跳跃.旋转画面的进度条。
@android:style/widget.ProgressBar.Large.Inverse:不断跳跃、旋转动i画的大进度条。
@android:style/Widget.ProgressBar.Small.Inverse:不断跳跃、旋转动画的小进度条。
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android: max:进度条的最大值
android:progress:进度条已完成进度值
android:progressDrawable:设置轨道对应的Drawable对象
android:indeterminate:如果设置成true,则进度条不精确显示进度
android:indeterminateDrawable:设置不显示进度的进度条的Drawable对象
android:indeterminateDuration:设置不精确显示进度的持续时间
android:secondaryProgress:二级进度条,类似于视频播放的一条是当前播放进度,一条是缓冲进度,前者通过progress属性进行设置!
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:progress="30"
android:secondaryProgress="50"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
getMax():返回这个进度条的范国的上限
getProgress():返回进度
getsecondaryProgress():返回次要进度
incrementProgressBy(int diff);指定增加的进度
isTndeterminate():指示进度条是否在不确定模式下
setindeterminate( boolean indeterminate):设置不确定模式下
例:每点击增加,第一进度条+5,第二进度条+10
layout中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</TextView>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:indeterminate="false"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/progressBar2"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="增加"
android:onClick="add"/>
</LinearLayout>
java 中MainActivity
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
private TextView tv;
private String meg; //定义一个变量
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar=findViewById(R.id.progressBar); //初始化
tv=findViewById(R.id.tv);
progressBar.setMax(100); //设置进度条值/
progressBar.setProgress(20);
progressBar.setSecondaryProgress(30);
meg="第一进度:"+progressBar.getProgress()+",第二进度:"+progressBar.getSecondaryProgress();
tv.setText(meg);
}
/** 事件处理方法 **/
public void add(View view){
//progressBar.setSecondaryProgress();
//每次更改进度的刻度
if(progressBar.getProgress()<progressBar.getMax()) //做判断:第一进度小于最大进度
{
progressBar.incrementProgressBy(5); //增加一次加5
}
if(progressBar.getSecondaryProgress()<progressBar.getMax()) //做判断:第二进度小于最大进度
{
progressBar.incrementSecondaryProgressBy(10); //增加一次加10
}
// progressBar.incrementProgressBy(5 );
// progressBar.incrementSecondaryProgressBy( 10);
meg="第一进度:"+progressBar.getProgress()+",第二进度:"+progressBar.getSecondaryProgress(); //显示
tv.setText(meg);
}
}
①拖拽进度条( SeekBar)
setonSeekearchangeListener(onseekBarchangeListener ) :设置改变的监听
onSeekBarchangelistener : onProgresschanged(SeekBar seekBar, intprogress,boolean fromUser):进度改变
onstartTrackingTouch(SeekBarseekBar):按下滑杆
onstopTrackingTouch(SeekBar seekBar):从滑杆离开
例:拖拽到某一位置,显示对应数值
layout中
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="30"/>
java 中MainActivity
public class MainActivity extends AppCompatActivity {
private SeekBar seekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar=findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new MyListner()); //添加一个监听器
}
class MyListner implements SeekBar.OnSeekBarChangeListener{
//进度改变
@Override
// SeekBar seekBar:有多个seekBar时,判断按下了那个? int progress:进度值 boolean fromUser:从哪一个用户来的
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.i("info",progress+","+fromUser); //打印消息
}
//按下滑杆
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.i("info",seekBar.getProgress()+"按下滑杆");
}
//从滑杆离开
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.i("info",seekBar.getProgress()+"停止滑动");
}
}
/** 事件处理方法 **/
public void add(View view){
}
效果显示
②设置星级(RatingBar)
android:rating=“0.5” //每次打五颗星
android:numStars=“5” //显示五颗星
3、警告框(AlertDialog)
在Android应用中,有多种对话框:Dialog、AlertDialog、ProgressDialog、时间、日期等对话框。
Dlalog类,是一切对话框的基类,需要注意的是,Dialog类虽然可以在界面上显示,但是并非继承与习惯的View类,而是直接从java.lang.Object开始构造出来的,类似于Activity,Dialog也是有生命周期的,它的生命周期由Activity来维护。Activity负责生产,保存,回复它,在生命周期的每个阶段都有一些回调函数供系统方向调用。
AlertDialog是Dialog的一个直接子类,AlertDialog也是Android系统当中最常用的对话框之一。一个AlertDialog可以有***两个Button或3个Button***,可以对一个AlertDialog设置title和message.不能直接通过AlertDialog的构造函数来生成一个AlertDialog.一般生成AlertDialog的时候都是通过它的一个内部静态类AlertDialog.builder来构造的。
①使用AlertDialog.Builder创建对话框需要了解以下几个方法:
setTitle :为对话框设置标题
setlcon :为对话框设置图标
setMessage:为对话框设置内容
setView :给对话框设置自定义样式
setltems :设置对话框要显示的一个list,一般用于显示几个命令时
setMultichoiceltems:用来设置对话框显示一系列的复选框
setNeutralButton:普通按钮
setPositiveButton:给对话框添加"Yes"按钮
setNegativeButton:对话框添加"No"按钮
create :创建对话框
show :显示对话框
setonShowListener : 对话框显示时触发的事件;
setOnCancelListener :对话框消失时触发的事件
show():显示警告框
create():创建AlertDialog对象
show():创建AlertDialog对象,同时将其显示出来
setTitle(CharSequence title):设置标题
setMessage(CharSequence message):设置内容
setPositiveButton(String text,OnClickListener listener):设置正面按钮
setNegativeButton(String text,OnClickListener listener):设置负面按钮
dismiss():移除dialog
setSinglechoiceltems(…)设置单选项列表
②测试界面
1.测试AlertDialog
2.测试ProgressDialog
3.测试DatePickDialog 、TimePickDialog
显示一般 AlertDialog
显示单选列表 AlertDialog
显示自定义 AlertDialog
显示圆形进度 ProgressDialog
显示水平进度 ProgressDialog
显示 DatePickerDialog
显示TimePickerDialog
例:对话框:显示一般 AlertDialog
layout
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="dialog"
android:text="显示一般AlertDialog"/>
MainActivity中
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//显示一般对话框
public void dialog(View v){
//1、构建一个dialog的对象
AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
//2、设置对话框基本属性
builder.setTitle("普通对话框");
builder.setIcon(R.drawable.ic_launcher_foreground);
builder.setMessage("确定要删除吗?");
//设置确定按钮,new DialogInterface.OnClickListener()匿名内部类
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("info","确定删除");
}
});
// 设置取消按钮
builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("info","取消删除");
}
});
//设置普通按钮
//builder.setNeutralButton();
//3、创建对话框
AlertDialog dialog=builder.create();
//4、显示对话框
dialog.show();
}
}
效果:
例:对话框:显示单选列表 AlertDialog
layout
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="dialog"
android:text="显示一般AlertDialog"/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="dialog2"
android:text="显示单选列表AlertDialog"/>
MainActivity中
public class MainActivity extends AppCompatActivity {
//数据源
private String item[]={"红色","蓝色","灰色"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//显示单选按钮对话框
public void dialog2(View v){
String item[]={"红色","蓝色","灰色"};
AlertDialog dialog;
AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
//2、设置对话框基本属性
builder.setTitle("单选对话框");
builder.setIcon(R.drawable.ic_launcher_foreground);
//设置单选对话框
builder.setSingleChoiceItems(item,0,null);
//设置确定按钮,new DialogInterface.OnClickListener()匿名内部类
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("info","确定删除");
dialog.dismiss();
}
});
// 设置取消按钮
builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("info","取消删除");
}
});
//3、创建对话框
AlertDialog dialog2=builder.create();
//4、显示对话框
dialog2.show();
}
//显示一般对话框
public void dialog(View v){
//1、构建一个dialog的对象
AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
//2、设置对话框基本属性
builder.setTitle("普通对话框");
builder.setIcon(R.drawable.ic_launcher_foreground);
builder.setMessage("确定要删除吗?");
//设置确定按钮,new DialogInterface.OnClickListener()匿名内部类
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("info","确定删除");
}
});
// 设置取消按钮
builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i("info","取消删除");
}
});
//3、创建对话框
AlertDialog dialog=builder.create();
//4、显示对话框
dialog.show();
}
}
效果