Android 11 中的可空性 我们都知道 Kotlin 的类型系统保障了 空安全 ,让我们得以书写更加安全的代码。...但是在 SDK 中并不是所有代码都是 Kotlin 写的,那么如何保证 Java 代码的空安全呢? 答案就是 注解。...来自 Google AI 团队的新发现。 添加了两种新的前台服务类型,摄像头 和 麦克风 。...如果您的应用要从前台服务访问摄像头或麦克风数据,则需要将对应的 foregroundServiceType 值添加到清单中。 应用可以在支持的设备上选择 可变刷新率。 模拟器现在支持前后摄像头了。...在最新的 Activity 1.2.0-alpha02 和 Fragment 1.3.0-alpha02 中,通过 ActivityResultRegistry 即可完成 startActivityForResult
大名鼎鼎的 ButterKnife 库相信很多 android 开发者都听过,在 Github 上star的数目已经快15k了,而且很多知名的app都在使用。..._ 其实这个库更加轻量级只做了几个最常用的注解,并且它是完全基于Kotlin进行开发的。...下载安装: 在根目录下的build.gradle中添加 buildscript { repositories { jcenter() } dependencies...中添加 apply plugin: 'com.neenbedankt.android-apt' ......injectview-compiler module ---- 所有的注解都是编译时的注解类型,比如Activity中在使用时,会生成一个相同的类名+$$ViewBinder的类。 ?
jar 你可以直接在 GitHub 下载最新的jar包 Gradle 如果使用 Gradle,可从 Maven Central 或 JCenter 中添加对 Glide 的依赖。...同样,你还需要添加 Android 支持库的依赖。...如果你在 Kotlin 编写的类里使用 Glide 注解,你需要引入一个 kapt 依赖,以代替常规的 annotationProcessor 依赖: dependencies { kapt 'com.github.bumptech.glide...(fragment).clear(imageView); 在RecyclerView 中使用 @Override public void onBindViewHolder(ViewHolder holder...holder.imageView); } 加载占位图 加载过程中的占用(Placeholder) Glide.with(fragment) .load(url) .placeholder(R.drawable.placeholder
14.2.3 实现后端 API 的接入 在本节中我们将实现后端 API 的接入及其数据展示的逻辑。...在 app 下面的 build.gradle中添加依赖 dependencies { ... // https://mvnrepository.com/artifact/com.alibaba...MovieListActivity 布局 UI 列表中图片的展示 关于图片的视图组件是 ImageView <ImageView android:id="@+id/movie_poster_image...Android 4.0 之后默认的线程模式是不允许在主线程中访问网络。...另外,Kotlin 的 Android 视图 DSL Anko 可以我们从繁杂的 XML 视图配置文件中解放出来。
大家好,又见面了,我是你们的朋友全栈君。 Android调用系统的拍照,打开相册功能 1 添加权限: <!...设置为全局变量 3 在相应的java类中: // 拍照的照片的存储位置 private String mTempPhotoPath; // 照片所在的Uri地址 private..., int resultCode, Intent data) { fragment4ImageView0 = findViewById(R.id.fragment4ImageView0)...是否有findViewById 如果是在onActivityResult中设置的setImage 即使在onCreate中findView 了也是不行的 要在onActivityResult中findView...中: 添加: <provider android:name=".Utils.GenericFileProvider" android:authorities="${applicationId}.my.provider
前言 众所周知在android中当执行程序的耗时超过5秒时就会引发ANR而导致程序崩溃。...因此在实际的开发中我通常把耗时操作放在一个新的线程中(比如从网络获取数据,从SD卡读取图片等操作),但是呢在android中UI的更新只能在UI主线程中进行更新,因此当我们在非UI线程中执行某些操作的时候想要更新...在第一个协程里边我们又调用了launch(UI)创建并启动了一个新的协程,这儿的UI并不是我们自己创建的,他是Kotlin在Android平台里边预定义的一个CoroutineContext,代表着在UI...也就是说当我们使用支持库的时候我们可以在Activity或Fragment中直接调用这个load函数(支持库里边的AppCompatActivity和Fragment实现了LifecycleOwner接口...一旦Activity的onDestroy方法被调用的时候,我们在load()函数中添加的lifecycle观察者将会取消第一个协程,也会使第二个协程被取消,避免block()被调用。
效果图 简介 TabLayout:一个横向可滑动的菜单导航ui组件 Tab:TabLayout中的item,可以通过newTab()创建 TabView:Tab的实例,是一个包含ImageView和...mBinding.tabLayout7.addTab(tab) 这种情况适合Tab的数据是动态的,比如接口数据回来之后,再创建Tab并添加到TabLayout中。...Tab内部其实是一个TextView和ImageView,添加图标就是给ImageView设置icon。...添加小红点的功能还是比较常见的,好在TabLayout也提供了这种能力,其实添加起来也非常简单,难在未知。...) { private val tabTitles = arrayOf("Android", "Kotlin", "Flutter") private val fragment
kotlin-android-extensions插件可能算得上是我最喜欢的一个Kotlin在Android上的特性了。...()函数重载,这和我们平时在Fragment中去加载布局文件的方式如出一辙。...其实如果你已经熟练掌握了ViewBinding在Activity和Fragment中的用法,那么现在应该可以举一反三了,因为在Adapter中使用ViewBinding基本也是同样的套路。...首先,我们在onCreateViewHolder()函数中调用FruitItemBinding的inflate()函数去加载fruit_item.xml布局文件,这和ViewBinding在Fragment...,不会再添加任何额外的布局结构。
该库的一些最新改进解决了常见的功能需求,包括支持调整曝光补偿和访问有关摄像头状态和功能的更详细信息。此外,现在可以在摄像头运行时通过 Camera2Interop 改变摄像头设置,如 FPS 范围。...作为向稳定版过渡的一部分,Hilt 的 ViewModel 支持已经上升到核心 Hilt Android API,SavedStateHandle 已经被添加为 ViewModelComponent 中的默认依赖...在过去的一年里,我们在 Fragment 库上着力甚多,对其内部实现进行了清理并减少了未记录的行为,使开发者更容易在他们的应用中遵循最佳实践,并编写可靠的测试。...使用构建器来创建模式类型的文件,然后将它们添加到存储中。查询 "body:fruit" 将检索所有在消息正文中带有 "fruit" 一词的文档。...符号处理 的实验性支持,在我们对 Kotlin 代码的基准测试中,其速度比 KAPT 提高了 2 倍,还带来了对枚举和 RxJava3 的内置支持。
本文实例讲述了Android开发实现ImageView加载摄像头拍摄的大图功能。分享给大家供大家参考,具体如下: 这个方法是从官方demo中摘录的,在此记录学习。...*/ takePhotoThenToShowImg.setImageBitmap(bitmap); galleryAddPic(); } } 最后可以将拍摄到的照片添加到Media Provider...的数据库中,以便图库或者其他程序读取照片 /** * 将拍摄到的照片添加到Media Provider的数据库中 */ private void galleryAddPic(){ Intent mediaScanIntent...Uri.fromFile(f); mediaScanIntent.setData(contentUri); this.sendBroadcast(mediaScanIntent); } 如果只需要缩略图的话,只要调摄像头拍摄直接处理结果就行...相关内容感兴趣的读者可查看本站专题:《Android拍照与图片处理技巧总结》、《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总
Coil 是一个非常年轻的图片加载库,在 2020 年 10 月 22 日才发布了 1.0.0 版本,但却受到了 Android 官方的推广,在 Android Developers Backstage...推广的原因比较简单:一方面是这个库确实做得很好,另一方面是这个库完全是用 Kotlin 写的,而且运用了大量 Kotlin 的特性,尤其是协程。...Coil 名字的由来:取 Coroutine Image Loader 首字母得来,可以看出通过 Kotlin 协程来进行图片加载,特点如下: 更快:Coil 在性能上有很多优化,包括内存缓存和磁盘缓存...suspend fun await() } 图片变换 图片变换是图片加载库中很常见的功能,Coil 将其抽象成 Transformation 接口,可以看到在 transform() 方法中有一个 BitmapPool...参数,这是因为在实现图形变换的时候往往需要一个 Bitmap,此时可以直接在 BitmapPool 中获取,从而复用已有的 Bitmap。
在很多情况下 (例如使用 ListView, GridView 或者 ViewPager控件), 显示在屏幕上的图片以及即将显示在屏幕上的图片数量是非常大的(例如在图库中浏览大量图片)。...另外,在 Android 3.0 (API Level 11)之前,这些缓存的Bitmap数据保存在底层内存(native memory)中,并且达到预定条件后也不会释放这些对象,从而可能导致 程序超过内存限制并崩溃...当在 ImageView 中显示图片的时候, 先检查LruCache 中是否存在。...然后,在Android 4.0中包含了一个更加可靠和推荐使用的DiskLruCache(libcore/luni/src/main/java/libcore/io/DiskLruCache.java)...磁盘操作从来不应该在UI线程中实现。当图片处理完毕后,最终的结果会同时添加到 内存缓存和磁盘缓存中以便将来使用。
大家好,又见面了,我是你们的朋友全栈君。 这是属于我的第一篇博文,首先说明一下,文章属性为原创,其实不能说是原创,我是在学习的过程中根据自己的理解整理的。...文章内容大多为书本上的内容,书本是郭霖的《第一行代码》。 正文:现在很多应用程序会调用摄像头的拍照功能,比如哪个程序要上传一张图片作为用户头像,这是启用摄像头拍照会很方便。...当然,还有第二种方法,就是在本地图库选取已经被保存的图片。...");//这个intent对象是用于开启本地图库的 intent.setType("image/*");//给intent对象设置必要的参数...//判断我们的uri的权限部分,media格式,对document id用":"分割,取出真正的数字id if ("com.android.provider.media.documents
作者 / Yacine Rezgui 无论您是在应用中请求某项权限,从文件管理系统中选择某个文件,还是期望从第三方应用中获取到某些数据,都会涉及到在 Activity 之间传递数据,而这也正是 Android...首先,您需要在 gradle 文件中添加以下依赖: repositories { google() maven() } dependencies { // 在 https://...在下列代码中,GetContent() 指的是 ACTION_GET_DOCUMENT intent,它是在 Activity 库中已定义好的默认协定之一。您可以在这里找到完整的已定义协定列表。...正如您看到的代码片段,ActivityResult 在处理来自 Activity 的返回数据时带来了更便捷的开发体验。...库的最新版本 https://developer.android.google.cn/jetpack/androidx/releases/fragment 我们也希望听到来自各位开发者的反馈,如果您有任何建议或意见
概述 在 上一篇文章 中,您已经学会了如何在多模块工程中使用导航 (Navigation)。在本文中,我们将更进一步,将咖啡模块转换成功能模块 (Feature Module)。...'] } 同时在 app 模块的 build.gradle 中,我从依赖列表中移除了咖啡模块并添加了 navigation-dynamic-features 依赖: implementation "androidx.navigation...为此,在 Run/Debug Configurations 弹窗中,我从待部署列表中取消勾选了 donuttracker.coffee。...class ProgressFragment : AbstractProgressFragment(R.layout.fragment_progress) { } 我添加了一个 ImageView、一个...在本系列中,我们再次使用了 Chet 的 DonutTracker 应用 并添加了咖啡记录功能。因为...我喜欢咖啡。 新功能带来了新责任。
现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上,也有很多的场景可以运用到...在开始之前,首先你必须已经了解Fragment的用法了,如果你对Fragment还比较陌生的话,建议先去阅读我前面的一篇文章 Android Fragment完全解析,关于碎片你所需知道的一切 。...在onCreate()方法中先是调用了initViews()来获取每个控件的实例,并给相应的控件设置好点击事件,然后调用setTabSelection()方法设置默认的选中项,这里传入的0说明默认选中第...这里注意一个细节,我们添加Fragment的时候并没有使用replace()方法,而是会先判断一下该Fragment是否为空,如果是空的则调用add()方法添加一个进来,如果不是空的则直接调用show(...设置完默认选中项后,我们当然还可以通过点击Tab项来自由地切换界面,这就会进入到onClick()方法中。
其实协程不仅在处理跨线程的问题有优势,还可以用来处理同一线程中的异步问题。 我认为有一个地方可以真正从中受益,那就是在 Android 视图系统中使用协程。...Android 视图 回调 Android 视图系统中尤其热衷于使用回调: 目前在 Android Framework 中,view 和 widgets 类中的回调有 80+ 个,在 Jetpack...suspendCancellableCoroutine 在 Kotlin 协程库中,有很多协程的构造器方法,这些构造器方法内部可以使用挂起函数来封装回调的 API。...) 就是 Fragment 中的 viewLifecycleOwner,只要加载了 Fragment 的视图,它就会处于活跃状态。...又由于我们已经为挂起函数中添加了对取消操作的支持,所以 lifecycleScope 被取消时,所有与之关联的协程都会被清除。
领取专属 10元无门槛券
手把手带您无忧上云