Android

分类下相关文章

Android 通过 ACTION_IMAGE_CAPTURE 拍照获取原尺寸的 bitmap 图片

之前匆匆实现了 Android 拍照功能,但测试时发现得到的图片尺寸都很小,并不是拍照时的原始尺寸。 从官方文档得知原来 ACTION_IMAGE_CAPTURE 从 Intent 得到的是图片的缩略图。 而且解决过程中,万万没想到 Android 官方文档的中文版示例代码有问题,直接用里面的代码根本运行不了。同时,里面不少翻译错误。 需要切换为英文文档,才能跑通。浪费大量时间,服气了。 最终效果 为何直接从 Intent 得到的是缩略图 实际上 Android 官方文档写的也很详细: val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAP ...

阅读全文...

Android 点击 ImageView 组件放大照片进行预览

例如,我想点击图片进行放大,可缩放。找到一个现成的库: https://github.com/stfalcon-studio/StfalconImageViewer/ settings.gradle maven { url "https://jitpack.io" } build.gradle implementation 'com.github.stfalcon-studio:StfalconImageViewer:v1.0.1' click listener imageView.setOnClickListener { val images = listOf(ur ...

阅读全文...

Android 显示加载中状态

例如,我要上传一个比较大的图片文件到服务器,等待处理完成,并接收返回结果。 这个过程可能很漫长,需要等待两秒,这时候我需要一个加载中的状态提示,避免用户不知所措。 Android Kotlin 比较好的实现方式 https://stackoverflow.com/questions/45373007/progressdialog-is-deprecated-what-is-the-alternate-one-to-use 显示效果 实现逻辑 先实现一个 layout_loading_dialog.xml,里面包含一个 ProgressBar 显示转圈,及一个 TextView 显示提示文字 ...

阅读全文...

Android ImageView 控件通过 URL 显示网络图片

要在 Android 里展示服务端接口返回的图片,数据格式是 URL。 Picasso 看起来还是 Picasso 这个库用起来比较方便 implementation 'com.squareup.picasso:picasso:2.8' Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView); Picasso 的优点 异步加载图片。省去了自己手动开线程。 Handling ImageView recycling and download cancelation in an adapter ...

阅读全文...

Android 从相册选择照片,或者拍照

之前实现了 Android 拍照获取图片,现在需要再加上从相册选择照片。 交互 其实有多种交互方式: 界面上直接放两个按钮:一个是拍照,一个是从相册选取。简单直接。 点击拍照按钮,弹出一个选择框,提供两个选项,一拍照,二从相册选择 对于界面空间富裕的场景,我觉得第一种方式就非常方便了。当然,我也懒得搞那么复杂。。。 可是微信里面那个相机为啥那么方便呢?是否是自定义实现的相机,而不是调用的默认的相机应用。 kotlin registerForActivityResult 实现,目前推荐 registerForActivityResult 并没有 startActivityForResult ...

阅读全文...

Android 线性布局 LinerLayout 实现两端对齐

例如接口返回的数据都是 key value 格式,诸如: 姓名:xxx 年龄:xxx 这种。我想用 Android 的 LinearLayout,即线性布局,实现两端对齐的效果。 最终效果 代码 其实原理很简单,就是在两个 TextView 之间插入一个空的 TextView, 然后这个 view 的 layout_weight 设置为 1。这样,这个空的 TextView 就能占据剩余的空间。 简单直接,比如那些引入 Space 的方案好太多了。 <LinearLayout android:layout_width="match_parent" ...

阅读全文...

Android Kotlin JSONObject 解析接口返回的 JSON 数据

我想试试不依赖三方库,例如 GSON,的情况下,用 Android 内置的 JSONObject 来解析后台接口返回的 JSON 字符串。 后台返回的 JSON 格式为: { "err_code": 0, "count": 4, "img": "static/public_images/20220405_093125_cb6e46b6301542ada1ee8e4a7a182e1f.jpg", "shape": [ 232, 174 ...

阅读全文...

Android Kotlin 使用 OkHttp3 上传拍照获取的 Bitmap 图片

断断续续耗费了快一天时间,终于把 Android 拍照并使用 OkHttp3 上传图片的功能实现。 整体感受: Kotlin 相关的资料还是少,即便是英文的资料也不足,特别是三方库。大部分都是 Java 的代码 Android 这些类库相关接口废弃得过于频繁,就算找到了示例代码,经常是已经废弃的接口。对新手很不友好 无聊的概念太多,必须沉住气,要不很容易掀桌子 家里有孩子需要看,不可能一直坐在电脑边,身边有本纸质参考书翻翻,即便是过时的实现方法,还是有启发的,也可以了解基础知识 OkHttp 官方文档 https://square.github.io/okhttp/ 只不过文档是基于 Ja ...

阅读全文...

Android 拍照并获取图片缩略图的实现

逻辑上是点击自己 Anroid APP 的拍照按钮,然后调用系统内置的相机应用,拍照后,将照片返回给我的 APP。 实际上就是启动一个 activity,并接收其返回的结果数据,然后再处理。 Android 官方推荐使用 AndroidX Activity 和 Fragment 中引入的 Activity Result API,以替代 startActivityForResult() 和 onActivityResult() API。 记录一下实现。 注意,这个方式获取到是图片的缩略图,并不是原始图片的尺寸,而且小非常多,几乎看不清的尺寸,如果要获取原始尺寸,需要参考Android 通过 AC ...

阅读全文...

Android 布局底部大按钮的实现,LinearLayout 对比 RelativeLayout

布局需求 一个植物种子图像识别的 Android APP,在功能页包含: 底部一个大按钮,用于拍照 顶部剩余区域展示选择的图片,及识别结果,例如自动识别出的种子个数 布局选型 网上搜了一下,发现可选的方案非常多。几乎各种 Layout 布局都有人采用,例如: LinearLayout RelativeLayout FrameLayout ConstraintLayout 从实现的角度,选择一个顺手的、方便自己理解的去用就行了。 但是作为 Android 萌新,我觉得还是有必要把各种 Layout 的实现方式都用一下, 相互对比,可以直观地理解不同 Layout 的特点,及其不同的使用场 ...

阅读全文...

新建 Android 项目是否需要勾选 Use legacy android.support libraries

有半年没有新建 Android 项目了,今天在 Android Studio Bumblebee 创建 Empty Activity 项目时,有个选项拦住了我。 Use legacy android.support libraries 什么是 legacy android.support libraries? 对于我这种业余型 Android 选手,一头雾水。 下面的解释: Using legacy android.support libraries will prevent you from using the latest Play Services and Jetpack librar ...

阅读全文...

Android dp sp 的区别

概述 px : 其实就是像素单位,比如我们通常说的手机分辨列表800*400都是px的单位 sp : 同dp相似,还会根据用户的字体大小偏好来缩放 dp : 虚拟像素,在不同的像素密度的设备上会自动适配 dip: 同dp 由此可以看出使用sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会。所以建议在字体大小的数值要使用sp作为单位 dp 而 dp 也叫 dip,是 device independent pixels 使用场景 TODO 参考 https://blog.csdn.net/donkor_/article/details/77680042 ...

阅读全文...

Jetpack Compose 的使用场景

去年投入了极大的热情学习了 Jetpack Compose,本以为可以永远地踢开 XML layout。写了个列表加详情页的简单 Android App,也没有遇到太多的问题,即便遇到了,也找到了解决方案。有的洋洋自得。但是在第二版想添加 Admob 广告时遇到了大坑,没有解决掉。于是,我觉得必须反思一下 Jetpack Compose 的使用场景,或者说使用方式。 jetpack compose 是否可以用在生产环境中 首先,compose 到底能否用在生产环境中,答案肯定是可以的。核心是怎么用的问题。 我在 reddit 上找到了一个非常高质量的讨论: https://www.reddit ...

阅读全文...

Jetpack Compose Admob 广告不显示问题排查

尝试在 Jetpack Compose 中添加 Admob 广告,参考的是下面链接里的第一种方案 https://stackoverflow.com/questions/68855709/how-to-show-a-banner-ad-in-jetpack-compose 但是,无论是在 Android 模拟器里,还是在真机上调试,都无法显示广告。 日志 2022-01-04 22:37:55.551 6242-6353/com.sunzhongwei.shelflife E/chromium: [ERROR:cookie_manager.cc(137)] Strict Secure Cook ...

阅读全文...

Android 模拟器:xxx requires the Google Play Store, but it is missing

在排查 Jetpack Compose 中 Admob 广告不显示问题时,发现一个运行时错误: xxx requires the Google Play Store, but it is missing 我其实很诧异,Android 模拟器里不都运行的是 Google 的原生系统么?为何会找不到 Google Play? 我打开 AVD 虚拟设备列表,发现确实如此。我当前正在使用的虚拟机确实没有 Play Store。 解决办法 其实就是一句话,新建一个带 Google Play Store 的设备。。。 在选择硬件的时候,会清楚的看到,部分手机型号带 Play Store,而其他的则不 ...

阅读全文...