学习记录 2020/11/22

Toast

  • Toast

    • Toast是一个消息提示组件
    • 我们可以设置其显示的位置
    • 自定义其显示的内容
    • 对Toast的简单封装可以达到不同的目的
  • Toast的默认用法
  1. Toast.makeText(getApplicationContext(), "Toast", Toast.LENGTH_LONG).show()

其中makeText相当于Toast类中的一个构造函数,他会根据你输入的参数来构造一个新的Toast返回给你。

第一个参数是一个context,可以选择直接调用getApplicationContext函数来输入,也可以输入当前的Activity的名字来输入,如:ToastActivity.this

第二个参数是一个String,用来表示Toast的输出内容

第三个参数是Toast的显示时间,LENGTH_LONG表示显示2s

  • Toast改变位置用法
  1. Toast toastCenter = Toast.makeText(getApplicationContext(), "居中Toast", Toast.LENGTH_LONG);
  2. toastCenter.setGravity(Gravity.CENTER, 0, 0);
  3. toastCenter.show();

调用makeText生成一个Toast,并调用setGravity将其位置设置为居中即可

  • Toast的自定义显示内容的用法,如增加一个图片
  1. // 首先需要一个Toast自定义显示的布局layout_toast.xml
  2. // 自定义为一个LinearLayout,里面包括了一个ImageView(id=iv_toast)和一个TextView(id=tv_toast)
  3. Toast toastCustom = new Toast(getApplicationContext());
  4. LayoutInflater inflater = LayoutInflater.from(ToastActivity.this);
  5. View view = inflater.inflate(R.layout.layout_toast, null);
  6. ImageView imageView = (ImageView) view.findViewById(R.id.iv_toast);
  7. TextView textView = (textView) view.findViewById(R.id.tv_toast);
  8. imageVIew.setImageResource(R.drawable.icon_simle); // 用drawable/icon_simle.png图片作为layout_toast布局文件中的imageView的图片
  9. textView.setText("自定义Toast");
  10. toastCustom.setView(view);
  11. toastCustom.show();

需要使用一个布局文件时,通过LayoutInflater来构造一个基于现在的activity的inflater,通过inflater来帮我们找到我们需要的布局文件。

  1. LayoutInflater inflater = LayoutInflater.from(ToastActivity.this);
  2. View view = inflater.inflate(R.layout.layout_toast, null);

最后通过view以及方法findViewById来找到当前的布局文件中的构成组件

  1. ImageView imageView = (ImageView) view.findViewById(R.id.iv_toast);
  2. TextView textView = (textView) view.findViewById(R.id.tv_toast);

然后通过组件各自的方法来实现我们需要显示的内容

  1. imageVIew.setImageResource(R.drawable.icon_simle); // 用drawable/icon_simle.png图片作为layout_toast布局文件中的imageView的图片
  2. textView.setText("自定义Toast");

最后把我们需要显示的自定义toast通过setView方法自定义我们的toast

  1. toastCustom.setView(view);
  • 多次点击显示Toast的按钮,Toast会排队,等待上一个Toast显示完之后再开始显示,不符合需求,所以我们需要对Toast进行简单封装
  1. public class ToastUtil {
  2. public static Toast mToast;
  3. public static void showMsg(Context context, String msg) {
  4. if (mToast == null) {
  5. mToast = Toast.makeText(context, msg, Toast.LENGTH_LONG);
  6. }
  7. else {
  8. mToast.setText(msg);
  9. }
  10. mToast.show();
  11. }
  12. }

运用以上简单的封装,我们可以达到多次点击生成Toast的按钮,只会按照最后一次点击来显示Toast的目的。

而这个封装与之前的按钮的区别是:之前的按钮每按一次都会创造一个新的Toast,而这次只会在第一次创造新的Toast,他调用的是同一个Toast的show方法。

AlertDialog

  • AlertDialog

    • 默认样式
    • 单选样式
    • 多选样式
    • 自定义
  • 默认用法
  1. AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
  2. builder.setTitle("请回答").setMessage("你觉得课程如何")
  3. .setIcon(R.drawable.icon_smile)
  4. .setPositiveButton("棒", new DialogInterface.OnClickListener() {
  5. @override
  6. public void onClick(DialogInterface dialog, int which) {
  7. ToastUtil.showMsg(DialogActivity.this, "你很诚实");
  8. }
  9. }).setNeutralButton("还行", new DialogInterface.OnClickListener() {
  10. @override
  11. public void onClick(DialogInterface dialog, int which) {
  12. ToastUtil.showMsg(DialogActivity.this, "你再瞅瞅");
  13. }
  14. }).setPositiveButton("不好", new DialogInterface.OnClickListener() {
  15. @override
  16. public void onClick(DialogInterface dialog, int which) {
  17. ToastUtil.showMsg(DialogActivity.this, "瞎说");
  18. }
  19. }).show();

通过AlertDialog的生产者模式Builder来生成AlertDialog

由于builder的大部分方法返回的都是builder本身,所以我们可以通过一系列的.来调用形成调用串

记得最后要调用show来显示AlertDialog

  • 单选样式的AlertDialog
  1. //没有radioButton的单选AlertDialog
  2. AlertDialog.Builder builder1 = new AlertDialog.Builder(DialogActivity.this);
  3. String[] array = new String[]{"男", "女"};
  4. builder1.setTitle("选择性别").setItems(array, new DialogInterface.OnClickListener() {
  5. @override
  6. public void onClick(DialogInterface dialog, int which) {
  7. ToastUtil.showMsg(DialogActivity.this, array[which]);
  8. }
  9. }).show();
  1. //有radioButton的单选AlertDialog
  2. AlertDialog.Builder builder2 = new AlertDialog.Builder(DialogActivity.this);
  3. String[] array = new String[]{"男", "女"};
  4. builder2.setTitle("选择性别").setSingleChoiceItems(array, 0, new DialogInterface.OnClickListener() {
  5. @override
  6. public void onClick(DialogInterface dialog, int which) {
  7. ToastUtil.showMsg(DialogActivity.this, array[which]);
  8. }
  9. }).show();

有radioButton的单选AlertDialog中setSingleChoiceItems中

第一个参数是一个String的数组,表示显示的列表

第二个参数是选定的数组的下表,在例子中,0则表示选中男,1则表示选中女

第三个是一个ClickListener

此时我们可以通过点击非AlertDialog的区域来取消AlertDialog的显示,如果我们希望用户一定要选择一个按钮才能取消显示,我们需要

  • 让builder产生的AlertDialog不支持自己取消:setCancelable(false)

  • 在onClick函数中调用dismiss方法

  1. new DialogInterface.OnClickListener() {
  2. @override
  3. public void onClick(DialogInterface dialog, int which) {
  4. ToastUtil.showMsg(DialogActivity.this, array[which]);
  5. dialog.dismiss();
  6. }
  7. }
  • 多选样式的AlertDialog
  1. AlertDialog.Builder builder3 = new AlertDialog.Builder(DialogActivity.this);
  2. String[] array = new String[]{"唱歌", "跳舞", "写代码"};
  3. boolean[] isSelected = new Boolean[]{false, falst, true};
  4. builder3.setTitle("选择兴趣").setMultipleChoiceItems(array, isSelected, new DialogInterface.OnClickListener() {
  5. @override
  6. public void onClick(DialogInterface dialog, int which) {
  7. ToastUtil.showMsg(DialogActivity.this, array[which]+":"+isSelected[which]);
  8. }
  9. }).show();

多选样式即从setSingleChoiceItems变成setMultipleChoiceItems,

第二个参数从选定的数组下标(int)改成是否选定的列表(boolean[])

  • 自定义样式的AlertDialog
  1. // 自定义一个布局layout_dialog.xml
  2. // 例子中包含一个EditText(id=et_username)表示输入用户名,一个EditText(id=et_password)表示输入密码,一个登陆按钮(id=btn_login)
  3. AlertDialog.Builder builder4 = new AlertDialog.Builder(DialogActivity.this);
  4. LayoutInflater inflater = LayoutInflater.fron(DialogActivity.this);
  5. View view = inflater.inflate(R.layout.layout_dialog);
  6. EditText eUserName = (EditText) view.findViewById(R.id.et_username);
  7. EditText ePassWord = (EditText) view.findViewById(R.id.et_password);
  8. Button btnLogin = (Button) view.findViewById(R.id.btn_login);
  9. btnLogin.setOnClickListener(new View.OnClickListener() {
  10. @override
  11. public void onClick(View v) {
  12. //
  13. }
  14. })
  15. builder4.setTitle("请登录").setView(view).show();

其中我们直接用setView设置自定义样式

ProgressBar & ProgressDialog

  • ProgressBar

    • 默认样式
  • 默认

可以直接在xml声明,可以自定义style,

style="???.Horizontal"时为水平的ProgressBar,

可以声明progress="10"说明此时的进度条进度

声明secondaryProgress说明进度条的二级进度(视频缓存之类的)

声明max说明进度条最大进度是多少

  1. // 可以在Activity中直接更改进度条的进度
  2. mpb = (ProgressBar) findViewById(R.id.pb);
  3. mBtnStart = (Button) findViewById(R.id.btn_start);
  4. mBtnStart.setOnClickListener(new View.onClickListener {
  5. @override
  6. public void onClick() {
  7. handler.sendEmptyMessage(0);
  8. }
  9. })
  10. mpb.setProgress(30);
  11. Handler handler = new Handler() {
  12. @override
  13. public void handleMessage(Message msg) {
  14. super.handleMessage(msg);
  15. if (mpb.getProgress < 100) {
  16. handler.postDelayed(runnable, 500); //延迟500ms发送一个信息给runnable
  17. } else {
  18. ToastUtil.showMsg(ProgressActivity.this, "加载完成");
  19. }
  20. }
  21. }
  22. Runnable runnable = new Runnable() {
  23. @override
  24. public void run() {
  25. mpb.setProgress(mpb.getProgress() + 5);
  26. handler.sendEmptyMessage(0);
  27. }
  28. }

此处,我们声明一个handler接受消息,一个runnable发送消息,这个过程其实是通过点击按钮,我们模拟一个ProgressBar加载的过程,每过500ms发送一次信息给runnable让他给progress加5进度直到进度为100.

  • 自定义ProgressBar
  1. // 通过自定义一个xml文件来生成旋转动画,具体表现为<animated-rotate/>
  2. // 然后使用ProgressBar时直接更改其style为自定义的动画即可
  • ProgressDialog

使用方法基本与AlertDialog相同

中级实训Android学习记录——Toast、AlertDialog、ProgressBar的更多相关文章

  1. Android学习记录(3)—Android中ContentProvider的基本原理学习总结

    一.ContentProvider简介        当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...

  2. mono for android 学习记录

    C#开发Android应用实战(全 扫描 中文版) 学习记录: 拖完控件后,不要急着按F5,需要重新生成,才能自动修改 Resource.Designer.cs 文件 1. Activity 是基于a ...

  3. android 学习记录-----------android 活动 意图 碎片

    将此篇博客作为记录android项目开发过程中的学习记录

  4. Android学习记录(三)——安装SQLite

    这次学习安装SQLite. 一.SQLite简介 重要特性:零配置,即不需要复杂的配置即可使用 详细:https://www.runoob.com/sqlite/sqlite-intro.html 二 ...

  5. Android学习笔记_81_Android ProgressDialog ProgressBar 各种效果

    1,弹出Dialog 屏幕不变暗. 创建一个样式就OK了:在styles.xml文件里添加样式: 1, <style name="dialog" parent="@ ...

  6. 【Android】Android 学习记录贴

    官网 教程学习笔记 Genymotion 安卓虚拟器太慢,用Genymotion(装载eclipse的插件) 利用Genymotion运行Android应用程序 1.首先,点击 来启动或者创建您要使用 ...

  7. Android学习记录(6)—将java中的多线程下载移植到Android中(即多线程下载在Android中的使用)③

    在这一节中,我们就来讲多线程下载以及断点续传在android中怎么使用,前两节是为本节做准备的,没有看前两节的同学,最好看完前面的两篇文章再来看这篇.其实在android端的应用和java基本上是差不 ...

  8. Android学习笔记使用AlertDialog实现对话框

    使用AlertDialog可以实现如下对话框 案例 布局问文件就加了几个Button,我直接上Java代码了 实现显示带取消,确定按钮的对话框按钮 Button showDialogOne = fin ...

  9. Android学习记录:ViewPager实现欢迎页

    许多APP在第一次启动的时候,都会有welcome page.近日尝试利用ViewPager来实现Welcome Page. d0711 完成记录,跟新下载地址 =================== ...

随机推荐

  1. ERP收付款的操作与设计--开源软件诞生22

    赤龙ERP收款付款讲解--第22篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...

  2. Flink的sink实战之一:初探

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. CF1320C World of Darkraft: Battle for Azathoth

    线段树 又是熟悉的感觉,又是E题写完了,没调完,不过还好上了紫 CF1295E 可以发现可以打败怪兽的关系类似二维偏序 那么首先考虑第一维(武器)以攻击值($a_{i}$)进行排序 把所有的怪兽以防御 ...

  4. leetcode104:permutations

    题目描述 给出一组数字,返回该组数字的所有排列 例如: [1,2,3]的所有排列如下 [1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], [3,2,1].  (以数字在数 ...

  5. 5 Post和Get

    5 Post和Get GET和POST有什么区别?及为什么网上的多数答案都是错的 知乎回答 get: RFC 2616 - Hypertext Transfer Protocol -- HTTP/1. ...

  6. vuex和axios的基本操作

    1.在src目录下创建一个api 是用于集中处理axios的相关配置 index.js就是处理axios的文件 具体如何使用axios 还请百度axios 2.URLs.js是存放需要请求的地址的 3 ...

  7. .net core mvc appsettings.json配置文件的使用

    配置文件的使用主要是两种用法 1.直接使用弱类型的数据 2.使用强类型的数据 (将配置的数据映射到类) 直接使用弱类型的数据  在appsetings.json文件中先新建两个节点 TestObj节点 ...

  8. 百度开源插件echarts介绍及如何使用

    前言 如果你想要用较少的代码实现比较酷炫的数据统计表,echarts是值得你考虑的一种实现方式.官网提供了很多实例供参考:http://echarts.baidu.com/examples.html. ...

  9. 快速识别烂项目!试试这款项目代码统计IDEA插件

    编程是一个很奇妙的事情,大部分的我们把大部分时间实际都花在了复制粘贴,而后修改代码上面. 很多时候,我们并不关注代码质量,只要功能能实现,我才不管一个类的代码有多长.一个方法的代码有多长. 因此,我们 ...

  10. 四:Redis五大数据类型

    Redis的五大数据类型 1.string(字符串) string是Redis最基本的类型,你可以理解成与menmcached一模一样的类型,一个key对应一个value string类型是二进制安全 ...