Android
文章平均质量分 64
匆忙拥挤repeat
倦鸟就此散 余花怎不乱 物是人已非 落寞
红尘难看破 美梦成真否 镜花水月尔 迷惘
展开
-
Android 使用NanoHTTPD 架设 Http Server + 客户端App 发送请求示例(含上传图片示例)
在指定端口启动 http 服务;定义调用规则:请求方式、Uri 路径匹配、参数解析等;将server 相关代码,安装在 A 设备上;client 相关代码安装在 B 设备上。在 client 中,发送 http 请求,获取响应数据。原创 2024-02-26 09:19:49 · 958 阅读 · 1 评论 -
Android Paging3分页+ConcatAdapter+空数据视图+下拉刷新(SwipeRefreshLayout)+加载更多+错误重试 (示例)
Paging3分页+ConcatAdapter+空数据视图+下拉刷新(SwipeRefreshLayout)+加载更多+错误重试 (示例)原创 2023-06-10 16:37:16 · 4318 阅读 · 6 评论 -
Android 项目开发,增加调试面板,及进入调试面板的入口问题
项目开发过程中,总会遇到一些问题,需要手动改动一个开关的值,重新编译运行需要手动改动接口地址,重新编译运行自己想看一些数据,但它们不应该在正常功能中以上,都可以增加一个调试面板来解决。在测试环境中,增加一个用于调试的 Activity,内部可以有各种配置、展示等等,开发人员,想咋弄咋弄…基于以上想法,打开调试面板的入口,就可以,类似打开『开发者模式』,在某个地方,连续点击n次,触发;弄个悬浮窗,触发。原创 2023-03-11 15:06:52 · 632 阅读 · 0 评论 -
Android 11,获取已安装应用的包名,和应用名
Android 11,获取已安装应用的包名,和应用名原创 2023-02-05 12:11:00 · 1066 阅读 · 0 评论 -
Android WindowInsetsController 设置状态栏、导航栏
底部的三个按键就是导航栏 (navigation bar): back / home / recent。高版本系统,recent,可能没有图标了,需要在那个位置"上滑"原创 2023-01-18 14:44:23 · 3327 阅读 · 0 评论 -
Android Studio : PKIX path building failed: ... (mac os -- ventura)
试了各种方法,什么 build clean, gradle.properties 中的 代理配置(这块 我这没有) 等等,后来尝试重启电脑,这个方法真好,重启一次就成功一次,下次不一定 …那就,把凡是代理中 选中的 都取消了,并把代理设置的相关软件关闭,再重启 Android Studio 就好了。后来,用 Android Studio(2021.3.1 Patch 1) 经常 出现。今天发现,原来是 WIFI 设置 里 有代理…mac,前阵子升级到了 ventura。原创 2022-12-26 10:57:57 · 470 阅读 · 0 评论 -
Android ContentProvider中使用 room 并支持API 30(android 11)
这个示例,断断续续地写了两三个周末了,上周完成了添加和条件查询操作;今天把模糊查询、删除、更新操作都完成了。authority 将用于 manifest 中注册、数据操作的Uri匹配规则,以及...原创 2022-12-23 16:35:55 · 1836 阅读 · 0 评论 -
Android 使用DataBindingUtil 封装支持DataBinding的BaseActivity、BaseFragment
如,混合webView时,在js回调中,再调用UI组件,这时宿主Activity可能已经finish了,而js回调开始执行。如上,泛型使用时,使用 reified 关键字,所以最终无法在 BaseActivity、BaseFragment 类定义中直接使用。后来,继续接触 dataBinding feature,期间还是使用之前定义的ViewBinding封装类,也没什么问题。就是觉得每次,实例化还是要重复写一堆一样的代码,有点麻烦。所以,只是前面的封装类中的 泛型类型改成。所以改成了,子类来实例化。原创 2022-12-11 17:18:11 · 2317 阅读 · 3 评论 -
Android MVI 模式的封装实现(基于kotlin Flow 和 ViewModel)
定义基类接口,和 通用的 实现的类/*** desc: UI 事件意图,或 数据获取的意图* 正在加载* 加载失败*/ class LoadErrorState(val error : String) : IUiState // 加载成功 class LoadSuccessState < T >(val subState : IUiState , val data : T?原创 2022-11-27 23:28:30 · 3923 阅读 · 15 评论 -
Android 多个EditText,下一个和最后完成的 xml配置
要设置单行效果,需要 android:maxLines=“1”,并显式指定 android:原创 2022-11-21 10:19:19 · 597 阅读 · 0 评论 -
Android API Level 和对应版本号
Android API Level 和对应版本号原创 2022-10-27 11:58:42 · 154 阅读 · 0 评论 -
Android Compose 版本与 Kotlin 版本的兼容问题
最新的 AS 是有版本自动提示的。输入1.3 发现就有了 1.3.0, 而文档中 稳定版本的 1.3.0还没更新上去。找到 kotlin 1.5.31 的配置,修改成 1.7.10。原创 2022-08-20 19:30:12 · 3390 阅读 · 0 评论 -
Android 防重复点击(Kotlin 协程实现 和 Handler实现)
文章目录Kotlin 协程实现调用Handler + Runnable 实现调用考虑了,直接绑定 View#setOnClickListener 实现函数;或传入View.OnClickListener 实例。Kotlin 协程实现调用mBind.btnJaClickA.debounceClick(this) { }mBind.btnJaClickB.debounceClick(lifecycleScope) { }mBind.btnJaClickC.debounceClick(this, o原创 2022-05-21 14:36:53 · 2583 阅读 · 0 评论 -
Android 解决InputMethodManager 内存泄露问题
在android 11的 InputMethodManager的源码中,查看 windowDismissed(),如下/** * An empty method only to avoid crashes of apps that call this method via reflection and do not * handle {@link NoSuchMethodException} in a graceful manner. * * @deprecated This is an empt原创 2022-05-04 23:52:01 · 2023 阅读 · 0 评论 -
Android 基于Gradle 7.2+,自定义插件示例(实测7.4.2也可以运行)
前几天,找到了之前从官方公众号中,收藏的文章,来简单学习一波Gradle与AGP。就是这一篇:Gradle 与 AGP 构建 API: 进一步完善您的插件!,文章内部会发现,这是一个小系列,共有3篇文章。原创 2022-04-27 23:55:33 · 4807 阅读 · 0 评论 -
Android Jectpack-Compose 库的粗略学习
断断续续的看了几天的文档,测试过一部分的官网示例代码,使用的是1.0.5版本。Compose 相较于View的体系优点是:一次测量,一次绘制,组合灵活多变。它不需要编写xml文件,纯代码编写界面,不用分窗口编码,导致分散开发人员的注意力。缺点是:牺牲了代码可读性,大量嵌套。在一个项目中,或多个风格类似的项目中,定义一套基础组件视图的公共库,它们都是由一个个@Composable 函数构成的,从前的一堆xml和View源码文件,变成了一个个".kt"源文件。再有一套说明文档,那应用起来应该会酸爽一些。原创 2021-12-11 21:45:10 · 2115 阅读 · 0 评论 -
Android 根据目标宽度,将bitmap等比缩放。
/** * 根据目标宽度,将bitmap等比缩放。 * dstWidth 确定的 目标宽度 */ fun calculateBitmap(bitmap: Bitmap, dstWidth: Float): Bitmap { val width = bitmap.width val height = bitmap.height // 如果得到的宽或者高是0 返回原对象 if (width == 0 || height == 0) return bitmap原创 2021-12-03 11:19:49 · 3140 阅读 · 0 评论 -
Android 获取View的Bitmap
fun createBitmapFromView(view: View): Bitmap? { val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) canvas.drawColor(Color.WHITE) view.draw(canvas) return bitmap }原创 2021-12-03 11:08:58 · 785 阅读 · 0 评论 -
Android View 通过平移、旋转、缩放后,顶点映射
View 通过平移、旋转、缩放后,其本身的 left、top、right、bottom、width、height是没有变化的。平移:setTranslationX(), setTranslationY() ;旋转:setRotationX(), setRotationY() ;缩放:setScaleX(), setScaleY() 。在三种操作后,获取新的 ltrb、w、h 就需要重新计算了// view 平移、旋转、缩放 变换后,计算新的 ltrb; ltrb ==> dst[0,1原创 2021-11-23 20:31:02 · 2690 阅读 · 0 评论 -
Android 拍照 引发 “SecurityException has no access to content://media/...“
现象:后台日志发现,只有在 android 10 以上的某些机型上才会引发异常。原创建 拍照图片的 uri 代码:val con = contentValuesOf()val cacheName = "xxx.jpg"con.put(MediaStore.Images.Media.DISPLAY_NAME, cacheName)val rootFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PIC原创 2021-11-17 14:25:46 · 5986 阅读 · 2 评论 -
Android RenderScript+ScriptIntrinsicBlur 或 RenderEffect(android 12) 实现 图片模糊效果
// 图片模糊函数private fun blurByRenderScript(bitmap: Bitmap, radius: Int, view: ImageView) { val rs = RenderScript.create(context) val allocation = Allocation.createFromBitmap(rs, bitmap) val blur = ScriptIntrinsicBlur.create(rs, allocation.element原创 2021-10-26 12:02:45 · 1368 阅读 · 0 评论 -
Android 利用 LiveData 共享数据,进行跨界面数据传递
import androidx.lifecycle.MutableLiveData/** * desc: 共享事件,进行跨界面数据传递 * author: stone * email: aa86799@163.com * time: 2021/10/15 16:01 */class LiveDataBus private constructor() : MutableLiveData<Event<FlashEvent>>() { compan原创 2021-10-18 15:30:52 · 1382 阅读 · 0 评论 -
Android ActivityResultContracts 请求权限(封装;含android 11权限变更)
文章目录Android 11 权限变更权限申请Android 11 权限变更官方文档Beginning with Android 11, ACTION_MANAGE_OVERLAY_PERMISSION intents always bring the user to the top-level Settings screen, where the user can grant or revoke the SYSTEM_ALERT_WINDOW permissions for apps. Any p原创 2021-09-13 14:10:21 · 1699 阅读 · 1 评论 -
Android layer-list 绘制圆环
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 底层圆;宽高属性在 api 23以上有效;一旦生效,若与目标view的宽高不一致,那看到的效果就不正常; 可以去掉 宽高配置,在目标view上配置上 相同的 宽高就行 --> <item android:wid原创 2021-08-27 11:19:51 · 700 阅读 · 0 评论 -
Android ActivityResultContracts 替代 startActivityForResult
没有ActivityResultRegistry的函数,默认使用当前宿主 Activity 的注册。可以自定义传入ActivityResultRegistry 参数, 在非 Activity/Fragment中注册。registerForActivityResult() ,在fragment中 需要在 created 之前在Activity中,需要在 started 之前将ActivityResultContracts#TakePicture 协议进行改造。对入参与结果类型进行改变。原创 2021-06-10 15:09:00 · 4000 阅读 · 3 评论 -
Android Jectpack-ViewBinding 实践(kotlin实现)
文章目录I. 文档II. 配置及简要说明III. 源码IV. 一个生成类的源码V. 使用方法VI. 封装VI.i. 一个DialogFragment例子VI.ii. 强制Fragment子类实例化ViewBinding对象I. 文档官方文档id kotlin-android-extensions 插件过时了,官方推荐 ViewBinding。以下为官方文档中的一段话:与 findViewById 的区别与使用 findViewById 相比,视图绑定具有一些很显著的优点:Null 安全:原创 2021-03-27 15:07:27 · 456 阅读 · 0 评论 -
Android Floyd-Steinberg-Dithering、Stucki-dither 抖动处理
文章目录I. Floyd-Steinberg-DitheringI.i. 动态数组实现I.ii. 指针实现II. StuckiIII. 示例I. Floyd-Steinberg-DitheringGithub: Native-Floyd-Steinberg-Dithering该作者对Floyd-Steinberg-Dithering 的处理中,使用的是静态数组,容易栈溢出。这里,给出两种实现来避免。当然,若一次处理的位图信息过大,也是会堆溢出,OOM的。I.i. 动态数组实现cpp 代码如下。原创 2020-12-21 20:21:49 · 1421 阅读 · 0 评论 -
Android 获取View的原图,并以高度分段裁剪存储
最后一段高度,可能小于 singleHeight;这里的处理是,会先创建一个空白的 singleHeight高的图,再将最后一段内容绘制上去;结果是会造成留白。原创 2020-12-09 15:54:53 · 436 阅读 · 0 评论 -
Android -- EditText输入法打开时,监听返回键
import android.content.Contextimport android.util.AttributeSetimport android.view.KeyEventimport androidx.appcompat.widget.AppCompatEditText/** * EditText输入法打开时,监听返回键 */class PrintTextEditTextView : AppCompatEditText { constructor(context: Cont原创 2020-12-06 11:15:26 · 450 阅读 · 0 评论 -
Android 在视图内容最顶层添加一个View
float_toast_text_layout.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@d原创 2020-12-01 11:27:00 · 2346 阅读 · 0 评论 -
Android - ColorMatrix 处理图像对比度
ColorMatrix 没有直接处理对比度的方法。内部有一个 4x5的矩阵数组: * <pre> * R’ = a*R + b*G + c*B + d*A + e; * G’ = f*R + g*G + h*B + i*A + j; * B’ = k*R + l*G + m*B + n*A + o; * A’ = p*R + q*G + r*B + s*A + t;</pre>原创 2020-11-23 17:52:28 · 899 阅读 · 3 评论 -
Android Dagger-Hilt 依赖注入
Author: aa86799@163.comdate: 2020-09-09 00:10文章目录文档地址依赖配置@HiltAndroidApp将依赖项注入 Android 类@Inject 注入定义 Hilt 绑定使用 @Binds 注入接口实例使用 @Provides 注入实例为同一类型提供多个绑定,使用限定符 @Qualifier预定义限定符:@ApplicationContext, @ActivityContextHilt 组件组件生命周期组件作用域组件层次结构在 Hilt 不默认支持的类中注入原创 2020-11-09 14:28:14 · 506 阅读 · 3 评论 -
Android 环形布局: FloatingActionButton + ConstraintLayout + 两个属性动画的同步使用
文章目录效果图布局与说明源码地址效果图布局与说明<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tool原创 2020-07-28 10:59:30 · 6844 阅读 · 0 评论 -
Android 自定义View:时间轴效果实现
这些年,也没有遇到具体需求,需要我来写这个效果的。这次巧了,它(需求)来了。当时写第一版就有效果了,只是达不到UI的要求。恩,这不重要,重要的是思路。思路很简单:一个自定义view;一个枚举类来表示其不同的状态,并刷新重绘;将该view组合到 RecyclerView.Adapter的itemView中。不完整示例代码(kotlin 版):class TimeLineView : View { enum class ViewType { TOP_CIRCLE, BOTTO原创 2020-07-13 11:02:31 · 304 阅读 · 0 评论 -
Android 自定义View:绘制轮盘扇形区并加入扇形区点击事件
还记得是五六年前写的demo,用的 `canvas.drawArc()` 及 旋转画布等实现了,绘制轮盘,当初不会path,不知道怎么搞 扇形区的点击事件... 强行搁置了... 后来学了Path后,也没去改它。这两天用 kotlin 重写了下,path玩了起来,然而写点击的扇形区域匹配时,且在有旋转角度后,先入为主的就走入了误区...原创 2020-04-07 00:36:04 · 1406 阅读 · 1 评论 -
Android 布局优化
多在xml布局中使用 tools命名空间: xmlns:tools=“http://schemas.android.com/tools”详见官网 。现在已经汉化了。曾经翻译的<include> 和 <merge>这两标签没啥好说的。tools:parentTag该属性主要来指定父级view-tag;在自定义组合布局时,配合<merge> 标签...原创 2019-11-26 15:58:58 · 818 阅读 · 0 评论 -
Android 自定义属性重复:../attrs.xml: Error: Found item Attr/rightTextColor more than one time
自定义属性时,对于不同的 属性域,采用了相同的属性名,会引发错误:../attrs.xml: Error: Found item Attr/rightTextColor more than one time<declare-styleable name="s1"> <attr name="rightTextColor" format="color"/></d...原创 2019-10-29 11:51:45 · 1870 阅读 · 0 评论 -
Android 自定义view(一) 基本实现方式和自定义属性
实现方式:1. 继承自View ,自定义一个View.2.继承自ViewGroup(容器),自定义设置子view的位置、尺寸等,用于组合一些组件,产生一个复合组件3.继承自已有的组件(View型 或 ViewGroup型),用于扩展现有组件的功能自定义类的构造函数: public CustomView2(Context context) {//直接在代码...原创 2014-08-21 16:42:29 · 7628 阅读 · 0 评论 -
Android 线程同步 ConditionVariable的用法
import android.app.Activity;import android.os.Bundle;import android.os.ConditionVariable;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public c原创 2014-01-28 11:04:50 · 4995 阅读 · 0 评论 -
Android 偏好设置 PreferenceActivity 小于3.0使用
import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.preference.CheckBoxPreference;import android.preference.EditTextPreference;import an原创 2014-03-15 17:42:39 · 2372 阅读 · 0 评论