Android 杂谈随记
文章平均质量分 69
点滴记录,工作学习中的随笔文章
安卓开发-顺
讲诚信,爱生活,学技术,写人生
展开
-
Android 实现分组标题吸顶效果,支持上下左右padding
先上gif效果图:技术方案:RecycleView + ItemDecoration具体实现:第一步:先实现相关业务代码,让数据加载出来Activity:/** * 实现吸顶效果 演示 */class RecyclerViewActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)原创 2022-02-28 11:29:09 · 4934 阅读 · 0 评论 -
Android 嵌套滚动NestedScrollView+TabLayout+ViewPager+Fragment+RecyclerView 实现京东、美团首页效果Tab页滚动到顶部时自动吸附
Android 嵌套滚动NestedScrollView+TabLayout+ViewPager+Fragment+RecyclerView 实现京东、美团首页效果Tab页滚动到顶部时自动吸附原创 2022-02-06 19:18:55 · 4463 阅读 · 4 评论 -
Android 自定义View 手写瀑布流组件FlowLayout
纸上得来终觉浅,绝知此事要躬行。FlowLayout实现关键步骤:1、创建一个view继承自ViewGroup2、重写并实现onMeasure方法3、重写并实现onLayout方法原创 2022-01-18 20:57:40 · 2864 阅读 · 0 评论 -
Android 认识注解、学习注解、使用注解
1、什么是注解?就像最常见的 @override注解一样,注解是一种通过一些标注就能自动完成一些代码实现的一种机制。2、注解的好处(1)使用注解可以降低项目的耦合度(2)能自动完成一些代码,实现代码的复用,减轻开发者工作量(3)代码侵入性较低,使用起来也很方便。3、什么是元注解?元注解有哪些元注解是java提供的基础注解,负责注解其他注解。元注解有以下几种@Retention:注解保留的生命周期 (源码阶段、编译阶段、运行阶段 例如 butternkife 中代替finid.原创 2022-01-12 16:07:50 · 976 阅读 · 0 评论 -
Android布局代码设置尺寸用px值还dp呢?
场景一、new LinearLayout.LayoutParams(width, height);这里的h就是LayoutParams中的width 和 height 要的就是px值注意:通过下面这种方式拿到的值也是px值 如果dimen文件里写的是dp 到这里取出来后系统会换算成pxint dimen = getResources().getDimensionPixelOffset(R.dimen.star_film_banner_height)场景二、...原创 2021-03-17 11:10:55 · 1528 阅读 · 0 评论 -
Android APP之间的跳转与传参数
方式一、只知道目标app包名的情况下:启动方:Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);intent.putExtra("param1","value1");intent.putExtra("param2","value2");context.startActivity(intent);接收方:Intent intent = getIntent();if.原创 2021-01-18 17:56:41 · 1561 阅读 · 0 评论 -
Android TV开发 视频窗口选中放大效果的实现
先上效果图视频模块的布局是这样的:<RelativeLayout android:id="@+id/first_view_rl" android:layout_width="510dp" android:layout_height="291dp" android:layout_marginLeft="@dimen/smart_hospital_home_marginLeft" android:layout_marginTop="@dimen/sma原创 2020-12-25 10:39:56 · 908 阅读 · 0 评论 -
Android Handler机制的几个疑问点验证
前提场景:Activity中new一个Handler并重写handleMessage方法public class SingleTopActivity extends Activity {@SuppressLint("HandlerLeak")Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg);原创 2020-12-06 18:21:14 · 305 阅读 · 0 评论 -
Android 直播时移功能的三种技术方案
一、准备知识:先了解下直播的播放原理(1)首先拿到一个在线播放地址,例如:http://xxx:8080/live/161347.stream/playlist.m3u8?ext=m3u8(2)然后把播放地址扔给播放器(3)播放器通过地址拿到m3u8文件 如下,没有结束标识,因为直播一直在持续更新,点播是有结束标识的。#EXTM3U#EXT-X-VERSION:3#EXT-X-MEDIA-SEQUENCE:16424144#EXT-X-ALLOW-CACHE:YES#EXT-X原创 2020-09-17 12:10:37 · 1423 阅读 · 0 评论 -
Android开发 如何计算最小屏幕宽度sw
问题:1、如何计算设备的最小屏幕宽度呢?2、布局文件里一个view的宽我写多少dp能刚好充满呢?3、res下有values-sw384、values-sw392、...values-sw1280等等我怎么知道一个设备会自动去找哪个适配文件呢?这三个问题其实是一个问题,下面来解答:首先获取屏幕宽、高、像素密度 单位是pxDisplayMetrics dm = context.getResources().getDisplayMetrics();int width = dm.w.原创 2020-08-17 16:03:48 · 2942 阅读 · 0 评论 -
浅谈Android手机cpu架构适配
常见手机端cpu架构 armeabi armeabi-v7a arm64-v8a (x86、x86_64 手机端可以忽略,大都是平板设备)场景一、只有armeabi-v7a架构的so或包含so的aar优点:1、兼容市场99.9%以上的设备,armeabi大概10年前手机会用,可以忽略。2011年以后的手机基本是armeabi-v7a、arm64-v8ax86的手机其实也有自己的兼容机制,可以兼容armeabi-v7a,不过x86手机几乎不存在2、体积小缺点:在arm64-...原创 2020-08-13 15:38:32 · 1876 阅读 · 0 评论 -
Android 拦截Tablayout 点击事件
背景:特定需求,点击某一个tab时,直接跳转到其他页面,不做任何选中操作,如下图点击小视频要跳转而不是选中这个tab思考:Tablayout是安卓官方提供的,内部的点击事件都在内部封装,没有暴露类似的回调接口让用户自己处理某个tab的点击事件,但是通过看源码发现 每一个tab的点击事件其实是一个内部封装的继承自LinearLayout的一个TabView来触发的看14...原创 2020-04-28 11:08:47 · 4254 阅读 · 8 评论 -
ScrollView嵌套RecyclerView再嵌套RecyclerView导致的布局展示不完整问题
背景:页面布局,最外层有个ScrollView,然后里面有个RecyclerView,然后每个RecyclerView的item都是一个RecyclerView异常:页面展示不完整,最底下的Item 展示一半,在往上滑就滑不动了解决:// 每一个item渲染完后重新计算外层recyclerview高度// 因为外层的recyclerview是先渲染的,渲染时 内部recy...原创 2020-03-30 16:19:16 · 709 阅读 · 1 评论 -
如何获取Android project下 build.gradle、gradle.properties、local.properties文件中定义的属性或变量
1、读取project下 build.gradle属性:ext { compileSdk = 28 minSdk = 17 targetSdk = 28 support = "28.0.0" buildTools = "28.0.0" supportLibraryVersion = "28.0.0" versionCode = 4...原创 2020-03-06 11:48:43 · 13907 阅读 · 2 评论 -
机顶盒App安装在sd卡的目录
/mnt/asec/com.Yinyou.sdjqTV-1/pkg.apk是mnt asec 不是mnt sdcard 记录一下,当data分区空间不足时,会安装到此目录下原创 2019-12-03 10:14:43 · 2425 阅读 · 0 评论 -
三处设置实现一个状态栏沉浸底部虚拟键不沉浸的底部弹出的全屏Dialog
先看下面的效果图,这个页面并不是一个Activity 而是一个Dialog,这个Dialog是全屏、顶部状态栏沉浸、底部虚拟器露出且支持从底部弹出的对话框,下面让我们通过三处设置来实现这个效果。一、给Dialog添加Stylepublic BaseDialog(@NonNull Context context) { super(context, R.style.ActionS...原创 2019-10-23 11:27:14 · 855 阅读 · 0 评论 -
开发细节备忘录
代码动态设置文件读写权限String command = "chmod 644 /data/data/com.xxx.xxx/cache/tmp.ts";Runtime runtime = Runtime.getRuntime();runtime.exec(command);机顶盒的启动Activity SplashActivity 断电重启会被启动两次怎么办?设置启动模式 a...原创 2019-10-21 11:17:32 · 742 阅读 · 0 评论 -
Android将本地工程提交到指定Git仓库上进行代码管理
第一步:安装Git第二步:在自己的工程目录下右键鼠标 选择 Git Bash Here执行命令 git init 来创建一个本地代码仓库执行命令 git add . 来把所有文件添加到仓库执行命令 git commit -m "first commit." 来提交代码 其中“first commit.”是注释信息 可自定义第三步:将本地仓库提交到远程仓库并关联...原创 2017-03-01 10:55:43 · 2435 阅读 · 0 评论 -
Android Notification(通知)适配 4.0 -- 8.0
Android 通知变更记录Android从5.0 对于通知栏图标的设计进行了修改。通知栏的大图标没有变化,主要是右下角的小图标,只能使用alpha图层来进行绘制,而不应该包括RGB图层。什么叫作只使用alpha图层来进行绘制呢?其实通俗点来讲,就是让我们的通知栏图标不要带颜色就可以了。这里的效果可参考博客:https://blog.csdn.net/guolin_blog/articl...原创 2019-04-17 10:12:18 · 939 阅读 · 0 评论 -
Android、Java 堆、栈、方法区的解释
转载于:https://blog.csdn.net/u013241673/article/details/78574770Java方法区、栈及堆一 方法区(Method Area)1. 什么是方法区(Method Area)?《深入理解JVM》书中对方法区(Method Area)描述如下:方法区(Method Area)与Java堆一样,是各个线程共享的内存区域。...转载 2019-04-22 13:57:23 · 676 阅读 · 0 评论 -
关于环信出现App重启后本地发送的消息记录丢失的解决办法
说一下我的场景:调用环信接口发送消息时,环信本地数据库会存储下来,我这里存储的逻辑是用对方的用户名 + 消息内容存到本地数据库,数据库的字段都是小写,如果此时对方用户名中包含大写字母,就会导致重启后取不到发送的消息记录,因为存的时候会自动把大写字母转换成小写。解决办法:调用发送消息方法时,这里的toChatUsername 不要带大写字母就可以了EMMessage messag...原创 2019-04-18 11:21:05 · 735 阅读 · 1 评论 -
Android 4.0~9.0适配
安卓6.0~9.0适配1.常用适配 大概列举1、Android 5.0对应的 通知小图标的适配2、Android 6.0权限的适配3、Android 7.0的文件共享的适配 此处经常用在读取本地下载好的文件 如apk升级文件等 适配方法如下:<provider android:name="android.support.v4.content.FilePr...原创 2019-04-19 17:22:20 · 1478 阅读 · 0 评论 -
Android Retrofit注解和postman各种参数类型的对应关系
一、Get请求 没啥区别都是拼在url串上二、Post请求 本文重点 1、form-urlencoded 方式 postman 是这个样子 retrofit是这个样子 后台收到是这个样子 Content-Type: application/x-www...原创 2019-05-29 11:35:10 · 807 阅读 · 0 评论 -
Android 调用第三方so中方法记录
背景:公司其他部门提供了一些c语言写的方法 用ndk封装成了 so文件 我们Android上层app需要调用开始:第一步:拷贝so文件到AS工程这里注意 如果你是放在module的 libs下 还要在module的build.gradle中 android{}里面加上这个配置sourceSets { main { ... ...原创 2019-07-24 10:27:47 · 6478 阅读 · 1 评论 -
Android data/data/包名 下相关路径记录
这里的this用的是Activity的contextString s2 = this.getFilesDir().getAbsolutePath();String s3 = this.getFilesDir().getParent();String s5 = this.getDir("zhangsan",Context.MODE_PRIVATE).getAbsolutePath();S...原创 2019-07-24 14:41:02 · 2504 阅读 · 0 评论 -
Android编译报错---持续记录中
编译项目时经常遇到各种错误,各种版本冲突,依赖找不到等,之前遇到了就解决一下,下次遇到又忘记了,有得查资料改,现在写篇博客把遇到的记录下来。错误1:Android dependency 'com.android.support:support-fragment' has different version for the compile (24.2.1) and runtime (27....原创 2019-09-09 15:32:07 · 322 阅读 · 0 评论 -
将自己的工程开源到GitHub---转载记录保存
1.1 工程中创建Module 最开始你可能自己写了个工程,感觉不错,进行了一定的封装和优化,想留作开发下一个App时用或者给别人用。但是每次复制粘贴代码显得繁琐,还要处理一堆的package name和import错误。于是你想着把它改造成独立的工程,每次整个工程复制进去,设置引用就可以了。这就要使用Android Studio的module了。以前,你的工程只有一个Module,就是(M...转载 2019-09-11 14:00:04 · 155 阅读 · 0 评论 -
Android 自定义Apk编译名称
例如自定义名称+当前时间来命名:android { ... android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "Test-${releaseTime()}.apk" } }}def r...原创 2019-09-11 15:40:03 · 576 阅读 · 0 评论 -
使用悬浮窗居中的问题 -- 有效果图
今天写了个全局可以弹出的悬浮窗来显示重要提示,结果自己把自己绕进去了,一直居中不生效,最后恍然大悟,是全屏状态下背景是透明的,都全屏铺满了,还咋居中啊,解决方法是内部在套一层布局,随便指定位置即可 ,另外这里的文字可以自动滚动显示,下面是截图和关键代码:效果图:布局文件:关键是第二个RelativeLayout 的android:layout_centerInParent="t...原创 2019-09-19 16:21:09 · 1308 阅读 · 0 评论 -
Android调用 Html方法 注意单引号
其中content是变量 不加单引号 调用失败webview_sy.loadUrl("javascript:setUrl('" + content + "')");原创 2019-02-28 14:21:35 · 598 阅读 · 0 评论 -
利用Glide 对设备上的图片进行压缩并保存
现在手机拍照照片都很多 3~10M很正常,如果要上传到后台那么需要压缩一下,下面利用Glide来压缩//图片框架 https://github.com/bumptech/glideimplementation 'com.github.bumptech.glide:glide:4.8.0'annotationProcessor 'com.github.bumptech.glide:comp...原创 2019-02-28 14:16:09 · 7690 阅读 · 0 评论 -
基于OKHttp实现对Https的支持
基于OKHttp实现对Https的支持,OKHttp版本:OKHttp3.6.0原创 2017-04-14 08:55:13 · 9170 阅读 · 4 评论 -
Android 工具类的两种写法---单例模式与静态方法
区别分析:(1)使用方式的区别第一种使用方法 :LogUtil.getInstance().print("test");第二种使用方法 :LogUtil2.print("test");(2)内存消耗的区别第一种使用方法 :在堆中创建了实例加上静态变量的引用,只要app不销毁就会常驻内存。第二种使用方法 :在程序启动时就分配了静态区域的内存,也会常驻内存。(3)效率方面第二种使用方法的效率会略高一些,静态的方法是被共享的,可以直接调用。原创 2017-04-21 13:50:54 · 6981 阅读 · 1 评论 -
常用的adb命令使用简介
总结了一下项目开发或现场支持时常用的adb命令:第一类:不需要重新挂载权限的1、截日志adb logcat -c 先执行此步骤清空日志adb logcat > D:\\test.txt -v threadtime 将日志截取到d盘下的test.txt文件中(会自动创建此文件)ctrl+c 停止日志截取并保存2、导出数据库命令adb pull原创 2017-05-11 14:39:56 · 504 阅读 · 0 评论 -
Android GreenDao3.2.0使用
简介:Greendao是一个开源的Android ORM(对象-关系映射)开发框架,它使SQLite数据库的操作变得更简单、更容易理解。它减轻开发人员处理低级别的数据库需求,同时节省开发时间。 SQLite是一个很好的嵌入式关系数据库。尽管如此,写SQL和解析查询结果是相当繁琐和耗时的任务。Greendao使你远离这些java对象映射到数据库表(称为ORM,对象-关系映射”)。这样你可以存储,原创 2017-04-17 10:19:55 · 943 阅读 · 1 评论 -
Tinker集成步骤
Tinker是腾讯出品的一款强大的热修复框架,今天我们来学习一下如何集成Tinker。第一步:在project的build.gradle中添加tinker的插件配置,如下红色部分buildscript { repositories { jcenter() } dependencies { classpath 'com.an原创 2017-04-17 10:32:22 · 1161 阅读 · 0 评论 -
git ignore 添加忽略文件不生效解决办法
前提:有时候我们在Android Studio中修改了Project下的 .gitignore文件,添加了一些忽略文件例如:.gradle/local.properties/.idea/workspace.xml/.idea/libraries.DS_Store/captures/build/.idea*.iml.idea但是我们发现在Version Contr...原创 2017-03-24 09:28:28 · 8147 阅读 · 1 评论 -
Android 布局预览时去掉TitleBar(标题栏)
今天写布局时,发现一个问题,之前没注意,在预览布局文件时有标题栏存在,导致预览效果不好。解决办法:在Android Studio预览界面选择无标题的主题样式来预览 如图:点击样式的按钮 弹出样式选择界面选择一个不带标题的样式即可。原创 2016-11-22 15:18:59 · 2864 阅读 · 0 评论 -
Android 图片框架的比较
第一、Gif的支持Fresco 支持Glide 支持Picasso 不支持ImageLoader 不支持第二、内存与性能1、Fresco:FaceBook出品,优点:(1)支持图像渐进式呈现 (2)大公司出品,后期维护有保障缺点:(1)框架体积较大3M左右会增大apk的大小 (2)操作方式不是特别简单,有一定学习成本原创 2016-10-19 14:12:27 · 2420 阅读 · 0 评论 -
Android网络框架综述(一)OkHttp、NoHttp、Volley
Android网络框架综述(一)OkHttp、NoHttp、Volley总结:(1)如果你的应用场景是频繁短暂的网络交互不涉及大文件的上传、下载 Volley足可以满足需求,apk的升级下载要自行封装一下;(2)如果你想更省事、更简单的开发可以使用NoHttp,不过NoHttp是个人开发的,后期的维护升级是有风险的;(3)如果想要稳定并且高效的一款网络框架,OkHttp是首选,花点时间找一个封装好的框架或者自己封装一下想要的功能就可以了。原创 2016-09-22 08:46:22 · 1696 阅读 · 0 评论