简单来说就是一句话:
弹出一个窗口,提示用户自己去选择,去提示,去分类的一些内容。
安卓自带的Diaalog有三种:
- AlertDialog—-普通的提示对话框
- ProgressDialog–进度条对话
- DatePickerDialog/TimePickerDialog–日期对话框/时间对话框
所有的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其他的几个类均继承自AlterDialog。
系统自带的dialog基本上用
AlertDialog
类
AlertDialog继承自Dialog类,对于Android内置的AlterDialog,它可以包含
一个标题、一个内容消息或者一个选择列表、最多三个按钮
。而创建AlterDialog推荐使用它的一个内部类
AlterDialog.Builder
创 建。使用Builder对象,可以设置AlterDialog的各种属性,最后通过Builder.create()就可以得到AlterDialog对 象,如果只是还需要显示这个AlterDialog,一般可以直接使用Builder.show()方法,它会返回一个AlterDialog对象,并且显示它。
下面我会讲三个层次的dialog的使用:
直接看图吧
这个和普通的dialog差不多,只不过是从中数组选择一个确定点击事件
它和列表对话框区别是前面有选择的圆点
也是一样的
在单选的基础上加了多选这个,就是选择的函数不一样
等待Dialog具有屏蔽其他控件的交互能力
@setCancelable 为使屏幕不可点击,设置为不可取消(false)
下载等事件完成后,主动调用函数关闭该Dialog
private void showProgressDialog(){ final int MAX = 100; final ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setTitle("我是个等待的Dialog"); progressDialog.setMessage("等待中"); progressDialog.setIndeterminate(true); progressDialog.setCancelable(false); progressDialog.show();
进度条对话框
就是和那些app上一样,简单的一个等待的框
* 进度条Dialog private void showWhiteDialog(){ /* @setProgress 设置初始进度 * @setProgressStyle 设置样式(水平进度条) * @setMax 设置进度最大值 final int Max = 100; final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setProgress(0); progressDialog.setIcon(R.drawable.icon); progressDialog.setTitle("我是一个进度条Dialog"); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMax(Max); progressDialog.show(); * 开个线程 new Thread(new Runnable() { @Override public void run() { int p = 0; while (p<Max){ try { Thread.sleep(100); progressDialog.setProgress(p); }catch (InterruptedException e){ e.printStackTrace(); progressDialog.cancel();//达到最大就消失 }).start();半自定义对话框
就是根据一些属性来自定义dialog,也可以添加自己的布局
1控制不同普通的dialog的位置,大小,透明度
在不同的dialog的下面添加设置//自定义的东西 //放在show()之后,不然有些属性是没有效果的,比如height和width Window dialogWindow = dialog.getWindow(); WindowManager m = getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 // 设置高度和宽度 p.height = (int) (d.getHeight() * 0.4); // 高度设置为屏幕的0.6 p.width = (int) (d.getWidth() * 0.6); // 宽度设置为屏幕的0.65 p.gravity = Gravity.TOP;//设置位置 p.alpha = 0.8f;//设置透明度 dialogWindow.setAttributes(p);
整体的代码:
* 自定义1 控制普通的dialog的位置,大小,透明度 * 在普通的dialog.show下面添加东西 private void DiyDialog1(){ AlertDialog.Builder alterDiaglog = new AlertDialog.Builder(MainActivity.this); alterDiaglog.setIcon(R.drawable.icon);//图标 alterDiaglog.setTitle("简单的dialog");//文字 alterDiaglog.setMessage("生存还是死亡");//提示消息 //积极的选择 alterDiaglog.setPositiveButton("生存", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this,"点击了生存",Toast.LENGTH_SHORT).show(); //消极的选择 alterDiaglog.setNegativeButton("死亡", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this,"点击了死亡",Toast.LENGTH_SHORT).show(); alterDiaglog.setNeutralButton("不生不死", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this,"点击了不生不死",Toast.LENGTH_SHORT).show(); AlertDialog dialog = alterDiaglog.create(); dialog.show(); //自定义的东西 //放在show()之后,不然有些属性是没有效果的,比如height和width Window dialogWindow = dialog.getWindow(); WindowManager m = getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 // 设置高度和宽度 p.height = (int) (d.getHeight() * 0.4); // 高度设置为屏幕的0.6 p.width = (int) (d.getWidth() * 0.6); // 宽度设置为屏幕的0.65 p.gravity = Gravity.TOP;//设置位置 p.alpha = 0.8f;//设置透明度 dialogWindow.setAttributes(p);自定义简单dialog的布局
把自己写的xml加载进去
第一步:自定义布局
自己定义dialog_1.xml<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="100dp" android:layout_height="100dp" android:layout_centerInParent="true" android:background="#ed093a"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="自定义加强版的dialog" android:textColor="#fff"/> </LinearLayout> </RelativeLayout>
- 第二步:在主活动里面设置dialog
然后把这个布局扔进去
* 自定义dialog2 简单自定义布局 private void DiyDialog2() { AlertDialog.Builder alterDiaglog = new AlertDialog.Builder(MainActivity.this,R.style.MyDialog); alterDiaglog.setView(R.layout.dialog_1);//加载进去 AlertDialog dialog = alterDiaglog.create(); dialog.show(); //自定义的东西完全自定义dialog
重要来到了最重头戏了,然后自定义dialog然后满足产品的需求,你只需要按照如下步骤来:
1.在values/styles.xml新建一个样式MyDialog2.新建一个MyDialog继承Dialog类
public class MyDialog1 extends Dialog implements View.OnClickListener{ //在构造方法里提前加载了样式 private Context context;//上下文 private int layoutResID;//布局文件id private int[] listenedItem;//监听的控件id public MyDialog1(Context context,int layoutResID,int[] listenedItem){ super(context,R.style.MyDialog);//加载dialog的样式 this.context = context; this.layoutResID = layoutResID; this.listenedItem = listenedItem; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //提前设置Dialog的一些样式 Window dialogWindow = getWindow(); dialogWindow.setGravity(Gravity.CENTER);//设置dialog显示居中 //dialogWindow.setWindowAnimations();设置动画效果 setContentView(layoutResID); WindowManager windowManager = ((Activity)context).getWindowManager(); Display display = windowManager.getDefaultDisplay(); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.width = display.getWidth()*4/5;// 设置dialog宽度为屏幕的4/5 getWindow().setAttributes(lp); setCanceledOnTouchOutside(true);//点击外部Dialog消失 //遍历控件id添加点击注册 for(int id:listenedItem){ findViewById(id).setOnClickListener(this); private OnCenterItemClickListener listener; public interface OnCenterItemClickListener { void OnCenterItemClick(MyDialog1 dialog, View view); //很明显我们要在这里面写个接口,然后添加一个方法 public void setOnCenterItemClickListener(OnCenterItemClickListener listener) { this.listener = listener; @Override public void onClick(View v) { dismiss();//注意:我在这里加了这句话,表示只要按任何一个控件的id,弹窗都会消失,不管是确定还是取消。 listener.OnCenterItemClick(this,v);
3.主活动继承自己写的dialog的接口,实现点击方法
//定义一个自己的dialog private MyDialog1 myDialog1; //实例化自定义的dialog myDialog1 = new MyDialog1(this,R.layout.dialog_2,new int[]{R.id.dialog_btn}); //绑定点击事件 myDialog1.setOnCenterItemClickListener((MyDialog1.OnCenterItemClickListener) this); myDialog1.show(); //调用点击函数 @Override public void OnCenterItemClick(MyDialog1 dialog, View view) { switch (view.getId()){ case R.id.dialog_btn: Toast.makeText(getApplicationContext(),"点击了",Toast.LENGTH_SHORT).show(); break; default: break;
最近项目还是没进度哇哇哇,心塞塞,准备开始弄个安卓游戏项目,要学一大堆东西。
什么叫dialog简单来说就是一句话:弹出一个窗口,提示用户自己去选择,去提示,去分类的一些内容。安卓自带的Diaalog有三种:- AlertDialog—-普通的提示对话框- ProgressDialog–进度条对话- DatePickerDialog/TimePickerDialog–日期对话框/时间对话框所有的对话框,都是直接或间接继承自Dialog类,而AlterDialog直接继承自Dialog,其他的几个类均继承自AlterDialog。系统自带的dialog基本上用A
https://github.com/sakurakid/DialogDemo这个的git地址,希望对别人有帮助自定义对话框是经常使用的功能,我们常用的弹窗操作,除了使用popwindow就是使用dialog来实现,这两种组件都支持之定义布局和功能来满足我们个性化的需求,也可以不采用自定义而直接使用系统封装好的api来实现功能。今天简单总结下在使用dialog做弹窗功能的方法和会遇到的问题与解决方案。 方法一:直接使用系统的,不自定义布局和功能方式 /* @setIcon 设置对话框...final AlertDialog.Builder normalDialog = new AlertDialog.Builder(MainActivity.this); normalDialog.set <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" and...Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。 ```java public class MainActivity extends AppCompatActivity { private static final int DIALOG_CUSTOM = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 显示自定义弹窗 showDialog(DIALOG_CUSTOM); @Override protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_CUSTOM: // 创建自定义弹窗 Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialog_custom); dialog.setTitle("自定义弹窗"); // 设置按钮的监听事件 Button btnOk = dialog.findViewById(R.id.btn_ok); btnOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理确定按钮的点击事件 Toast.makeText(MainActivity.this, "点击了确定按钮", Toast.LENGTH_SHORT).show(); dismissDialog(DIALOG_CUSTOM); Button btnCancel = dialog.findViewById(R.id.btn_cancel); btnCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理取消按钮的点击事件 Toast.makeText(MainActivity.this, "点击了取消按钮", Toast.LENGTH_SHORT).show(); dismissDialog(DIALOG_CUSTOM); return dialog; return super.onCreateDialog(id); 在上面的代码中,我们创建了一个自定义弹窗,并设置了确定和取消按钮的点击事件。在Activity的onCreate()方法中,调用showDialog()方法显示弹窗。当用户点击按钮时,弹窗会被关闭。这个函数只分割第一个遇到的分割符。这是我跑的代码,输出结果写在注释了。供大家参考。可惜不能传图片[code=csharp] #include <stdlib.h> #include <string.h> int main() { char ptr[]= { "abac-dedf-ghgo "}; char *p,*str= "-"; p=ptr; printf( "%s\n ",strsep(&p,str));//abac printf( "%s\n ",p);// dedf-ghgo str= "g"; printf( "%s\n ",strsep(&p,str)); //dedf- printf( "%s\n ",p);//hgo [/code] Android音频系统之AudioFlinger(一) malloc1free: 说了半天都没介绍AudioFlinger是做什么的,上层做什么的,下层做什么的,将了一大堆废话 Android音频系统之AudioFlinger(一) malloc1free: 说了半天都没介绍AudioFlinger是做什么的,上层做什么的,下层做什么的,将了一大堆废话 Linux中 strsep 函数 详解 世界的回复: 想问一下如果字符串中有两个相同字符来做分隔符会是什么效果