概念 Android中的对话框需要使用AlertDialog类来显示,主要用于显示提醒信息,不过这个对话框类可不仅仅能用来显示一些信息,我们可以在对话框中防止任何的控件,使其成为一个复杂且功能强大的用户接口...单击使用setPositiveButton和setNegativeButton方法添加的按钮后,即使单击事件中不写任何代码,对话框也是会关闭的 如果某个按钮单击后只需要关闭对话框,并不需要进行任何处理,...---- 带3个按钮(覆盖、忽略、取消)的对话框 用AlertDialog类创建的对话框最多可以添加3个按钮,除了上面添加两个方法,还可以使用setNeutralButton方法向对话框中添加第三个按钮...实际上,这种对话框相当于将ListView控件放在对话框上,然后在ListView中添加若干简单的文本()。 在这个实例中,选择后显示选中值,5S后自动关闭。 ?...AlertDialog.Builder.setView方法可以将视图对象添加到当前的对话框中,使用下面的形式将一个视图对象添加到对话框中。
AlertDialog Android中最常用的对话框是AlertDialog,它可以完成常见的交互操作,如提示、确认、选择等等,然后就是进度对话框ProgressDialog(参见《Android...Dialog 实际开发中,AlertDialog往往还是无法满足个性化的要求,比如布局不够灵活、按钮的样式无法定制等等,所以常常得自己自定义对话框。...下面是Dialog的常用方法: Dialog构造函数 : 可定义对话框的主题样式(样式在styles.xml中定义)。如是否有标题、是否为半透明、对话框的背景等等。...默认会自动关闭 getWindow : 获取对话框的界面对象。 其中getWindow方法是自定义对话框的关键,首先获取到对话框所在的界面对象,才能往这个界面上添加定制视图。...{ @Override public void onClick(DialogInterface dialog, int which) { showToast("嗯,今天我有事,明天可以吗
本来按照迭代计划,下一个版本中,我是准备给PermissionX增加自定义权限提示对话框样式的功能。...但是可以看到,在setOnClickListener()方法中,我们创建了一个View.OnClickListener的匿名类,那么View.OnClickListener的代码是什么样的呢?...意味着,在Lambda表达式当中,我们就自动拥有了ExplainScope的上下文,因此可以直接调用ExplainScope类中的任何方法。...这个也很好理解,怎么可能连前台请求位置信息都没同意呢,就允许在后台请求位置信息了。 在Android 10系统中,如果我们同时申请前台和后台定位权限,那么将会出现如下界面: ?...,这里先是创建了RequestChain的实例,然后向链表中添加一个RequestNormalPermissions任务用于请求普通的权限,又添加了一个RequestBackgroundLocationPermission
同样的,我们可以在manifest文件的Activity描述中添加接受的数据类型。 在不同的程序之间使用intent收发数据是在社交分享内容时最常用的方法。...分享二进制内容(Send Binary Content) 分享二进制的数据需要结合设置特定的MIME类型,需要在EXTRA_STREAM`里面放置数据的URI,下面有个分享图片的例子,该例子也可以修改用于分享任何类型的二进制数据...下面有一些方法来处理这个问题: 将数据存储在 ContentProvider中,确保其他程序有访问provider的权限。...如果是不同图片格式的话,应该是用image/来匹配那些可以接收任何图片类型的activity。如果需要分享多种不同类型的数据,可以使用/*来表示MIME。....")); 当然,请确保指定到数据的URIs能够被接收程序所访问(添加访问权限)。
该函数在每次一个对话框打开时都调用. 如果你不定义该函数,则对话框每次打开都是一样的. 该函数也会传入对话框的id以及你在onCreateDialog()中创建的Dialog对象. ...如果你使用这些示例代码, 你可以在onCreateDialog()中返回最后的Dialog对象来获得图片中对话框的效果. ...大部分创建进度对话框需要的代码是在更新它的进程中。你可能需要在一个新的线程中更新它,并使用Handler来将进度报告给Activity。...在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(int id, Dialog). 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。...然后,添加用setItems()添加一个可选项列表,该列表接受一组显示的items和一个DialogInterface.OnClickListener 来定义用户选中按钮后所采取动作。
一、集成三方库PermissionsDispatcher 1.添加依赖 a. project目录下的build.gradle文件 classpath 'com.neenbedankt.gradle.plugins...Manifest.permission.READ_PHONE_STATE) void ACacheShowRationale(PermissionRequest request) { request.proceed(); // 提示用户权限使用的对话框...) void ACacheOnPermissionDenied() { MyUtil.showToast("真的确定拒绝授予权限吗"); } /** *.../** * 请求权限 * * @param permissions 请求的权限 * @param requestCode 请求权限的请求码 */...* * @param permissions 请求的权限 * @param requestCode 请求权限的请求码 */ public void requestPermission
,昵称和简介是可以不用填写的,所以在显示的时候如果没有填就显示这个默认值,如果是Kotlin的话就直接使用缺省值就好了,这两个默认值会在xml中用到的。...三、权限请求 权限在Android上是一个麻烦但是又不得不做的事情,如果你要是还是Android6.0以下的手机就可以不用管这些,但是很可惜现在都是Android10,11了,因此我们还需要做兼容。...: ② 权限工具类 我这里可以自己写一个工具类,当然也可以用第三方框架,在utils包下新建一个PermissionUtils类,里面的代码如下: public class PermissionUtils...这里需要修改注册页面中的默认值,从之前的空字符串改成null,这样在xml中的判断值才会有作用,同时及时你的值为null,在xml中也不会报错,这是DataBinding做了处理,类似于Kotlin中的空安全...//显示加载弹窗 showLoading(); 添加的位置 然后就是在initView方法中增加代码: //获取NavigationView的headerLayout视图
builder.setContentTitle("恭喜你中奖了"); //在通知栏显示的内容 builder.setContentText("你的号码被我公司抽中...,熄灭的市场 builder.setLights(Color.BLUE, 200, 200); //设置通知的声音,要根据自己的音频位置 builder.setSound...如果你是在Fragment上操作,有一点点的不同,留意注释上的说明 @Override public View onCreateView(LayoutInflater inflater, ViewGroup...); //设置是否可以点击屏幕其他地方或者返回键取消显示 builder.setCancelable(true); //添加一个自定义布局,比如一个布局里一个输入框...Toast.LENGTH_SHORT).show(); } });*/ //很多朋友都会忘了show builder.show(); } 普通的对话框
Android调用相机与相册的方法 操作流程 点击拍摄 效果图 点击相册选择 效果图 拒绝权限的情况 效果图 功能实现 项目配置 1.先在项目根目录的build.gradle的repositories添加...: 2.在build.gradle(:app)的dependencies添加: 3.添加提示dialog样式 4.添加底部dialog样式 底部dialog弹出动画(dialog_in_anim.xml...) 底部dialog关闭动画(dialog_out_anim.xml) 5.添加权限 6.在AndroidManifest.xml中添加剪切activity活动 代码实现 DialogManager.java...操作流程 点击拍摄 点击头像(我这里使用的是ImageView控件),然后点击拍摄,去申请权限,允许则打开相机 拍摄 然后进去裁剪框 选取合适的位置合适的大小 点击√,即设置成功 效果图 点击相册选择...dialog样式 如果使用弹出提示的XUI自定义dialog则需要在AndroidManifest.xml中application的主题添加样式 添加以下样式: <style name="
所以AlertDialog并不需要到布局文件中创建,而是在代码中通过构造器(AlertDialog.Builder)来构造标题、图标和按钮等内容的。...新建一个工程,在MainActivity上放置不同的按钮,点击按钮就会有相应的对话框弹出。...仔细阅读谷歌的API文档就知道了,setSingleChoiceItems 方法中实现的onClick方法中which表示的是当前选中的列表中的item下标,而setPositiveButton和setNegativeButton...我们创建一个集合,将点击选中的item添加到集合中,取消勾选的话就从集合中移除,点击确认按钮后就在日志中打印出来。...6、总结 关于AlertDialog的知识当然不止这么多,大家可以点击参考文献中的链接去阅读API文档。至于源码嘛,只是一些布局和简单代码,就不上传了。
、通过 Toast.show () 方法显示 Toast 窗体 u 调整 Toast 的显示位置 u 默认情况下, Toast 显示在屏幕底部,水平居中的位置...u 通过 Toast.setGravity () 方法可以修改显示位置,支持三个参数 Ø 第一个参数 gravity :接收一个 Gravity 常量,可以是常量的组合 Ø...Toast 的外观除了默认情况外,也可以进行定制 u 1 、为 Toast 中显示的内容定制一个视图布局( toast_layout.xml ) <LinearLayout...layout_height="wrap_content" android:textColor="#FFF" u 2 、采用动态加载的办法在程序中为...(“信息提示”); 使用 AlertDialog, 添加按钮 builder.setPositiveButton("Yes", new DialogInterface.OnClickListener
继承Dialog来实现Dialog 通过继承Dialog来实现自定义的Dialog,这样我们就可以在任何地方直接new我们的Dialog就可以实现特定的对话框了。 ... * 当参数值包含Gravity.CENTER_HORIZONTAL时,对话框水平居中,所以lp.x就表示在水平居中的位置移动 * lp.x像素,正值向右移动,负值向左移动.... * 当参数值包含Gravity.CENTER_VERTICAL时,对话框垂直居中,所以lp.y就表示在垂直居中的位置移动lp.y像 * 素,正值向右移动,负值向左移动....的一些参数进行了解释,我把对话框设置的离左上角离顶部100px的位置。...、y、gravity来实现的,当然可以自定义Dialog的弹出动画就可以实现一个菜单对话框了。
(PS:也可以用第三方公司出的,比如腾讯的Bugly等,也挺方便的,不过apk要上传到Bugly的平台上,然后公司要求在自己平台上,所以没有使用。)...因为Android6.0开始后,单纯的在AndroidManifest.xml中定义权限已经不够了。需要再代码中动态让用户来确定才能给APP相应的权限。...注意:由于在请求权限的过程中app有可能会被重启,所以权限请求必须放在初始化的阶段,比如在Activity.onCreate/onResume, 或者View.onFinishInflate方法中。...现在我们也已经把下载APK的所需的权限也搞定了,当用户同意授予相应的权限的时候,接下去就是跳出对话框,询问用户是否需要更新APK,这里就是单纯的创建一个对话框询问即可,估计大家都会,直接上代码: AlertDialog.Builder...APK的安装与卸载 这里安装APK的时候要提下Android 7.0的特殊情况: 因为7.0之后权限变得更加严格,通过Intent来安装APK需要添加一个Provider,这里我Demo没写,给出下面文章链接
Dialog弹窗 前言 在日常开发中用到弹窗是比较多的,常用于提示作用,比如错误操作提示,余额不足提示,退出登录提示等,还有用于数据展示的弹窗,上拉弹窗等等,主要为了简化在日常开发中的使用。...正文 Android中的Dialog弹窗是一种用于展示特定信息或者在用户需要进行某些操作时才显示的窗口。Dialog弹窗可以分为系统提供的常规Dialog弹窗和自定义Dialog弹窗。 ...,在使用的时候可以传递弹窗视图Id也可以直接传View进来,这是获取弹窗的视图,还有获取弹窗视图中的子控件的视图,通过获取子控件的视图就可以对子控件如TextView、ImageView、View等控件进行属性及点击事件的设置...然后是DialogParams类,里面定义了弹窗的一些参数,有一个构造方法,传入上下文和主题,然后通过apply()方法去设置DialogController中的方法,最终设置弹窗的位置和动画效果以及宽高...四、样式 为了增加用户体验,我们可以为弹窗增加出现和消失的动画效果,下面在themes.xml中增加如下代码: <!
在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的。...这种注册方法一般过程是 在Activity中创建一个IntentFilter的对象,然后用IntentFilter对象的addAction()方法添加相应的广播类型 我们还需要有一个我们自定义的广播接收器的对象...此外,还有一点非常重要的是,android系统为了保证应用程序的安全性做了规定,如果程序中需要访问系统的关键性信息,必须在配置文件中声明权限才行,否则程序将会直接崩溃,比如像上面的查询网络状态就需要声明权限...不要在广播接收器的onReceive()方法中添加过多的逻辑或者进行任何耗时操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法运行太长时间而没有结束时,系统会报错。...广播的类型可以在我们创建Intent对象的时候通过构造方法Intent(String action)来自定义,eg: 1 button.setOnClickListener(new OnClickListener
中不需要做任何操作,当数据库发生变化list条目也变化了,前提必须是CursorAdapter 源码: curosr 注册监听: * cursor.setNotificationUri(ctx.getContentResolver...* 在SQLiteCursor 中的requery方法中: * 重新查询数据: * 执行数据观察者的notify方法 :mDataSetObservable.notifyChanged(); *... } } GroupUI 群组创建后,在会话页,长按某一个会话添加到群组中 public class GroupUI extends ListActivity implements OnItemLongClickListener...菜单条目 ,并添加至 menu 中 getMenuInflater().inflate(R.menu.activity_group, menu); return true; } @Override...() { @Override /** * which 是点击的条目的位置 */ public void onClick(DialogInterface dialog, int which
先介绍下如何使用: //在Activity中定义成员变量声明需要的读写权限 String[] permissions = new String[]{ Manifest.permission.CAMERA...,未授予的权限存储到mPerrrmissionList中 List mPermissionList = new ArrayList(); //逐个判断你要的权限是否已经通过...= PackageManager.PERMISSION_GRANTED) { mPermissionList.add(permissions[i]);//添加还未授予的权限...是我们在弹出页面后是否允许权限的标识数组,数组的长度对应的是权限名称数组的长度,数组的数据0表示允许权限,-1表示我们点击了禁止权限 public void onRequestPermissionsResult...mPermissionsResult.passPermissons(); } } } /** * 不再提示权限时的展示对话框
WindowManager 在前面《Android开发笔记(六十六)自定义对话框》中,我们提到每个页面都是一个Window窗口,许多的Window对象需要一个管家来打理,这个管家我们称之为WindowManager...静态悬浮窗 悬浮窗有点类似对话框,它们都是独立于Activity页面的窗口,但是悬浮窗又有一些与众不同的特性,例如: 1、悬浮窗是可以拖动的,对话框则不能; 2、悬浮窗不妨碍用户触摸窗外的区域,...,我们要实现窗口的悬浮效果,就不仅仅是调用WindowManager的addView方法那么简单了,而是需要做一系列的自定义处理,具体步骤如下: 1、在AndroidManifest.xml中声明系统窗口权限...因为Application对象在app运行过程中是始终存在着的,而Activity对象只在打开页面时有效,一旦退出页面则Activity的上下文就立刻回收(这会导致依赖于该上下文的悬浮窗也一块被回收了)...对于手机的实时流量,可以通过TrafficStats类的相关方法计算得到,该类的详细说明参见《Android开发笔记(七十九)资源与权限校验》。 下面是实时流量悬浮窗的效果截图: ?
,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。...现在重新运行一下程序,EditText就已经在界面上显示出来了,并且我们是可以在里面输入内容的 细心的你平时应该会留意到,一些做得比较人性化的软件会在输入框里显示一些提示性的文字,然后一旦用户输入了任何内容...可以看到,EditText中显示了一段提示性文本,然后当我们输入任何内容时,这段文本就会自动消失。 不过,随着输入的内容不断增多,EditText会被不断地拉长。...源路径是可以通过活动中的方法修改的,那么一来可能就会导致改变显示的图片 ImageView是用于在界面上展示图片的一个控件,它可以让我们的程序界面变得更加丰富多彩。...invisible 表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态了。 gone 则表示控件不仅不可见,而且不再占用任何屏幕空间。
setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener):设置对话框的"取消"按钮,可以通过listener...setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener):设置对话框的"中立"按钮,可以通过listener...自定义布局相关的方法: setView(View view):设置自定义的布局视图,可以将自定义的布局添加到对话框中显示。...创建和显示对话框: create():使用设置的属性和配置创建AlertDialog实例。 show():展示对话框,将AlertDialog显示在屏幕上。...四 总结 AlertDialog是一种常用的对话框,可用于提示信息、确认操作或让用户做出选择。根据需求,在构建器中设置对话框的标题、消息内容、图标等属性,并通过按钮点击监听器处理用户的响应。
领取专属 10元无门槛券
手把手带您无忧上云