Android

分类下相关文章

荣获一张搞笑证书:Google Play Store Listing Certificate

这个证书的中文名是:Google Play 商品详情证书。主要是在 Google Play 里发布 App 相关的一些规范和技巧,倒是有不少的实用的内容,比如 App 名字规范、简介规范、详情规范等。对我而言,可以规避一些无效、或者违规的 ASO 尝试。 通过了 Google Play 商品详情证书考试,即可获得证书。 比较奇葩的是,学习课程是中文的,考试的时候是全英文的,大概 70 道题,我花了一个多小时考完,佩服自己的耐心。考完后头昏脑胀,感觉不值得浪费这个时间。基本上能看懂英文的都能通过这个考试吧,即便没有学过这个课程。 通过考试后,3个工作日会收到 Google Play Store ...

阅读全文...

Google Play 商品详情的描述规范

趁着 Google Play 最近搞的一个学习活动,了解了一下谷歌应用市场的优化技巧。 产品介绍的写作思路 面向的特定用户群体:例如,孩子家长,研究生,程序员之类 其他 app 没有的特色功能 常用功能有哪些?用户对哪些功能赞不绝口。 使用应用能获得什么优势? 你对应用最满意的部分是什么 是否有订阅内容 隐私保障 避免使用的词汇 免费 完美 最佳 排名第一 顶级 新 折扣 促销 百万次下载等 立即下载 立即安装 立即开始游戏 立即体验 避免堆砌关键词 这个是 Google 明确指出的。 而我恰好有这个习惯,这个做法在 baidu 和 bing 上屡试不爽。 但是确实对 Google 效 ...

阅读全文...

RecyclerView Layout Weight

例如,我想将 RecyclerView 的高度设置为占据整个屏幕余下的空间。 代码结构 // 外层,例如 LinearLayout android:layout_height="match_parent" // 组件,例如 RecyclerView android:layout_weight="1" android:layout_height="0dp" 如果不设置 layout_height 会遇到运行时错误: you must supply a layout_height attribute 如果设置 layout_hei ...

阅读全文...

Material Design 3

官方文档 https://m3.material.io 契机 最近要启动一个 Android 项目,我感觉需要一套 Android 上的 UI 模板/框架。 类似 Web 开发中的 Bootstrap 这样的 UI 框架,否则我的组件、配色都很难搞定。 Material Design 看起来是最好的选择。 选择 Material Design 3 还是 2 看起来 Material Design 3 比 2 少了很多组件 例如: 分割线 日期选择器 需要动手测试,3 是否兼容 2 的组件,即 3 中也能使用 2 的组件。 但也不一定 2 就更全,可以看到很多 2 的组件,只有规范,但是 ...

阅读全文...

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 ...

阅读全文...