
Android开发记录
文章平均质量分 95
记录Android开发中遇到的问题
孙先森i
程序员是一个积累的过程
展开
-
Android View绘制流程源码浅析(从源码角度理解为什么子线程不能更新 UI)
一文让你从源码角度彻底理解为什么不能从子线程更新 UI原创 2022-07-08 22:45:00 · 1091 阅读 · 1 评论 -
Android RadioButton修改圆圈大小
修改radioButton选择圆圈大小,找两个图片(选中,未选中),通过给radiobutton控件设置button属性,设置为selector属性,selector中引用两个layer-list资源文件,在layer-list中可以设置大小效果图:代码如下:radio_button_green_check<?xml version="1.0" encoding="utf-8"?...原创 2019-12-31 15:20:36 · 7187 阅读 · 1 评论 -
Android 沉浸式状态栏适配(兼容多机型)
适配状态栏百度千篇一律的判断机型,由于在RN开发时设置状态栏也就一句代码的事,我翻了以下android的文档,分享一下我在项目中如何适配状态栏状态栏适配,实则是完成以下操作:1.状态栏透明,布局直接从屏幕顶部开始,布局顶部加padding即可2.状态栏背景白色时,字体变成黑色,反之则设为白色3.android6.0之前不提供修改状态栏字体颜色的方法,所以我采用给它设一个半透明黑色背景,突显...原创 2019-12-26 09:47:49 · 1854 阅读 · 2 评论 -
Android 打开系统文件管理器选择文件
记录一下打开手机文件管理器选择文件的实现代码: //定义 请求返回码 public static final int IMPORT_REQUEST_CODE=10005; public void openFileManager(){ Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*...原创 2019-11-08 17:52:59 · 6544 阅读 · 1 评论 -
Android 自定义view中接受广播刷新数据
在写自定义view时遇到需要刷新数据时,可以利用接受广播来改变数据,那么在自定义view中如何接受广播?自定义view中给我们提供了两个函数,分别是onAttachedToWindow和onDetachedFromWindow;通过测试发现他们的执行顺序是onAttachedToWindow、onDraw、onDetachedFromWindow;所以我们在onAttachedToWindow中...原创 2019-10-17 16:55:29 · 918 阅读 · 0 评论 -
You cannot start a load for a destroyed activity
这个错误是我在使用Glide加载图片时,频繁打开关闭activity时会出现的异常。解决办法:把context改为Application的context。//自定义Applicationpublic class App extends Application { private static App mApp; public void onCreate() { ...原创 2019-10-16 10:10:55 · 3021 阅读 · 1 评论 -
Android 获取网络视频某一帧图片
获取网络视频的某一帧作为封面图,可以使用Glide实现,但是效果不是很好,主要问题就是加载慢,有几秒的延迟。这里利用Android提供的MediaMetadataRetriever类来获取。MediaMetadataRetriever主要是对网络、本地媒体文件做操作。获取某一帧代码如下:MediaMetadataRetriever retriever = new MediaMetadataRe...原创 2019-10-14 13:08:53 · 4667 阅读 · 1 评论 -
Parcelable encountered IOException writing serializable object (name = XXX)
记录一下遇到的bug问题、原因:Parcelable encountered IOException writing serializable object (name = XXX)我遇到这个问题的原因在于,利用intent传递bundle是的实体类中的内部类没有全部实现Serializable接口。 实体类中的每一个内部类都需要实现Serializale接口...原创 2019-10-12 09:12:28 · 2967 阅读 · 0 评论 -
Android view不同状态下切换不同背景
一般是通过设置background为drawable资源实现不同状态不同背景。代码如下:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:stat...原创 2019-10-12 09:03:53 · 1012 阅读 · 0 评论 -
Can't create handler inside thread Thread[Thread-37,10,main] that has not called Looper.prepare()
报错原因可能是以下几种情况:不是在主线程中开启了新的线程异步操作中执行UI显示(在异步操作中调用UI函数,如Toast)解决办法:在你的报错的行数的逻辑前后加上Looper.prepare();...ToastUtils.show("这是一条Toast");...Looper.loop();...原创 2019-05-20 17:00:13 · 11534 阅读 · 0 评论 -
Android 自定义Dialog
自定义Dialog:public class MyDialog extends Dialog implements View.OnClickListener { private Context context; private int layoutResID;//布局文件id private int[] listenedItem;//监听的控件id Strin...原创 2019-05-20 17:43:44 · 276 阅读 · 0 评论 -
Android ShareSDK快速实现QQ分享功能
前言要集成QQ分享,首先需要去QQ开放平台注册成为开发者,然后创建应用获得到应用对应的appkey和appSecret才能在ShareSDK中分享为什么没有微信分享,因为微信上传应用审核必须要有官网才能通过(我官网填www.baidu.com审核不通过)效果图:QQ开放官网:https://connect.qq.com/index.html注册成功后 在应用管理中可以看到自己的appk...原创 2019-05-10 18:50:21 · 2645 阅读 · 0 评论 -
本地生成下载链接
在开发过程中,会碰到很多关于下载的功能,这里记录下本地如何生成下载链接供给开发测试的。首先需要安装IIS,在“启用或关闭Windows功能”中勾选安装IIS。勾选时可以全部勾选,我全部安装了之后C盘的空间并没有占用很大,全部勾选以防各种问题。要注意,每个文件夹里有些选项不支持自动全选,要手动去全部勾选。单击确定,根据提示,等待安装完成,安装完成后启动IIS。启动之后...原创 2019-09-17 09:17:29 · 16071 阅读 · 6 评论 -
Android Retrofit2+Rxjava2的使用
之前写过一篇这样的文章,当时初学,理解不够透彻,写法比较不实用。开发过程中,渐渐学习到了正确的使用方式,在这里简单记录一下需要引入的包 //rxjava "rxjava" : 'io.reactivex.rxjava2:rxjava:2.1.12', //rxandroid "rxandroid" : 'io...原创 2019-05-10 15:05:23 · 1169 阅读 · 0 评论 -
Android 拦截频繁点击事件
使用场景:如果一个按钮的逻辑有跳转activity功能(activity由于业务逻辑不能修改启动模式),此时快速单击两下按钮,会弹出两个相同的页面(网络请求也通用)解决思路:获取两次单击事件的时间差,在dispatchTouchEvent中判断。代码如下: private long lastClickTime = 0; //设置拦截的时间间隔 500毫秒 private long ...原创 2019-05-15 10:52:37 · 1944 阅读 · 0 评论 -
Android Zxing集成后竖屏不能扫条形码解决
本文章参考:将zxing扫码界面改为竖屏的问题**1. 功能概述**默认的ZXing Demo提供的是横屏扫描,不符合现在市场的流行趋势和用户的使用习惯,然而在修改界面为竖屏的过程中,我们发现zxing无法读取条形码数据(二维码可以正常读取)。修改布局的过程不再赘述。2. 修改说明在AndroidManifest.xml中,把Activity的属性的screenOrientatio...转载 2019-04-25 17:27:13 · 2303 阅读 · 1 评论 -
Android本地集成Zxing实现扫码功能
Zxing集成过程的记录:注明:参考自《简单粗暴 手把手教你 集成 zxing3.3.3》首先github下载3.3.3的zxing源码Github地址:https://github.com/zxing/zxing/tree/zxing-3.3.3如果嫌网速慢的话可以用这个:https://download.youkuaiyun.com/download/qq_38356174/11099156下...转载 2019-04-25 17:24:22 · 3891 阅读 · 0 评论 -
Android第二次面试总结
Activity生命周期释放资源在哪个方法,恢复数据在哪个方法广播的使用,生命周期两种广播的区别程序的保活,收到一条通知(程序未打开)单击要跳转到一个页面怎么实现service的使用,启动和关闭,生命周期fragment的生命周期多线程的通信方式,多进程的通信方式bundle可以传递那些数据类型int和integer的区别,String、StringBuffer 、String...原创 2019-05-31 11:09:35 · 958 阅读 · 0 评论 -
Android AutoCompleteTextView使用
AutoCompleteTextView是一个android提供的可以补全输入的textview,效果类似于PC端百度一下那个输入框下面会带出来搜索历史。先看下效果图:我采用了自定义adapter的方式给他增加了删除的功能(单击x会删除那一条记录)实现步骤:xml布局中添加AutoCompleteTextView<AutoCompleteTextView ...原创 2019-04-28 15:58:23 · 8484 阅读 · 1 评论 -
Android 锁屏后Service服务保活(支持9.0)
最近遇到个问题:后台Service启动正常启动后,锁屏状态下大概80秒左右Service就被暂停了(并没有被杀死),唤醒屏幕后就继续执行。网上搜了很多办法不好用知道看到一篇文章Service和Notification 给我提供了解决思路和解决办法。解决思路:Service启动时创建一条通知,与其绑定,这样锁屏或者后台Service都不会被暂停或杀死。代码如下:在Service的onCr...原创 2019-05-24 17:43:25 · 17132 阅读 · 11 评论 -
Android 代码混淆记录
代码混淆记录:首先在app.gradle中设置混淆:buildTypes { release { debuggable true //设置混淆 minifyEnabled true //混淆文件 proguardFiles getDefaultProguard...原创 2019-05-16 11:05:02 · 288 阅读 · 0 评论 -
Android recyclerview上拉加载更多
记录一下视频列表(recyclerview)上拉显示一个“加载更多”的item,然后加载数据。效果图:实现思路:1.写两个item布局,一个用来展示数据,一个用来展示加载中也就是滑到最下方的时候显示的“加载更多”。2.在adapter中写两个viewholder,对应两个xml文件。3.adapter中重写getItemViewType用来鉴别当前item是不是最后一个,如果是最后一个...原创 2019-05-31 14:59:04 · 14405 阅读 · 3 评论 -
More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'
今天写安卓的时候碰到一个这样的错误More than one file was found with OS independent path ‘META-INF/proguard/androidx-annotations.pro’解决办法:检查自己添加的依赖库是否有重复的删掉即可...原创 2019-01-17 13:36:50 · 2584 阅读 · 0 评论 -
Android 验证码按钮
效果图:实现思路,利用 CountDownTimer 倒计时工具类,指定间隔修改button显示文字以及是否可以点击,代码如下://下面代码直接写在onclick事件中CountDownTimer timer = new CountDownTimer(60000, 1000) {//参数为 (倒计时长,间隔) @Override ...原创 2019-10-09 13:19:36 · 527 阅读 · 0 评论 -
Android 指定item滑动到可见区域第一个位置
将列表滑动到某个item一般都使用scrollToPosition()方法,但是这个方法有个弊端,只要传入的item索引是当前可见的不管它的位置在头部尾部还是中间就不会滑动。效果图:我遇到的需求是需要将指定item滑动到可见区域的第一个位置,解决办法如下:LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller...原创 2019-10-08 17:03:29 · 1054 阅读 · 1 评论 -
Android饺子播放器自定义
最近做了下视频播放功能,基于饺子播放器对其UI进行了修改,期间也遇到一些bug,记录一下。引入我使用的是6.4.2版本,7.0版本之后的源码有一些变化,不过大同小异;将github上源码下载下来,以import module的方式将源码中的jiaozivideoplayer引入。切换播放源我使用的是ijkplay,首先添加需要的依赖和一些.so文件 //ijk播放内核 imple...原创 2019-09-27 09:26:08 · 4499 阅读 · 6 评论 -
Android 阿里vLayout中GridLayoutHelper布局Position问题
在RecyclerView中使用vLayout时出现了GridLayoutHelper布局中setSpanSizeLookup时有问题,问题代码如下:gridLayoutHelper.setSpanSizeLookup(new GridLayoutHelper.SpanSizeLookup() { @Override public int getS...原创 2019-09-24 15:38:46 · 2286 阅读 · 0 评论 -
android word文档预览(支持doc/docx两种格式)
之前的一个需求写成了一个依赖库,主要就是实现可以在app里打开word文档,不用去调一些其他的wps等等的第三方软件。先提供一个其他思路,集成腾讯TBS,大厂的SDK还是不错的,效果就自己试试吧。我的依赖库是基于java中poi一些jar包去读.doc(或.docx)解压后得到的html文件里的内容,利用IO流将解析的内容写入一个html文件,最后用webview去呈现这个html文件即可。(注...原创 2019-09-17 11:10:31 · 9583 阅读 · 10 评论 -
Android 获取路径
Android// /data/data/包名/filescontext.getFilesDir(); // /data/data/包名/cachecontext.getCacheDir(); //这两个文件夹下的内容会随着app卸载而删除// /storage/emulated/0Environment.getExternalStorageDirectory()...原创 2019-09-03 09:42:55 · 1408 阅读 · 0 评论 -
Android 定时任务
Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { new Thread(new Runnable() { @Override ...原创 2019-05-31 15:58:13 · 850 阅读 · 0 评论 -
github基本使用记录
初识github,使用次数少,经常忘记怎么操作,写出来记录一下。登录github创建一个新项目: 进入到你本地的android工程目录中,右键空白处–>Git Bash here出现命令行窗口。在github网页中复制你刚刚创建项目的github地址: 在命令行窗口输入以下命令:git clone https://…(刚刚复制的地址)然后你的工程目录会出现一个新的文件夹,名...原创 2019-04-08 09:43:18 · 286 阅读 · 0 评论 -
Android长按图片保存到本地并且更新图库
实现效果:实现过程:首先定义以下数组://长按后显示的 Itemfinal String[] items = new String[] { "保存图片"};//图片转成Bitmap数组final Bitmap[] bitmap = new Bitmap[1];图片转Bitmap数组代码:Glide.with(context).load(url).asBitmap().into(...原创 2019-04-07 18:05:01 · 6630 阅读 · 1 评论 -
RecyclerView只显示一条数据解决办法
布局样式中最外层如果是LinearLayout的话,把layout_height属性改为自适应即可。android:layout_height="wrap_content"其实你看到的一条数据,只是一个item占据了整个屏幕看上去像是只显示了一条,滑动下屏幕就会发现问题所在。...原创 2019-02-20 16:16:18 · 5207 阅读 · 3 评论 -
Android Activity切换动画(滑入滑出)
Activity默认的切换动画太生硬,为了给用户良好的体验,我们可以自己写一个xml动画文件,改变切换时的动画。一个简单的例子:打开新窗体时从右侧滑入,关闭窗体时从左侧滑出。首先需要三个xml动画文件(建立在res/anim/文件夹下面)1.右侧滑入from_right.xml<?xml version="1.0" encoding="utf-8"?><set xm...原创 2019-02-20 16:12:00 · 3938 阅读 · 0 评论 -
ListView(RecyclerView)中EditText数据错乱问题
今天做项目碰到一个BUG,一个listview中多个item,每个item中有两个EditText和一个Textview。item很多,Listview可以滑动。当我在第一个Item中的EditText中输入文本后,来回拉动Listview,就会导致EditText中的值消失,或者到其他的EditText上。查询之后发现是 Listview复用的问题 。网上的解决方案我试了很多,也许是我自己的...原创 2019-01-28 17:38:06 · 776 阅读 · 1 评论 -
Android Dialog实现全屏变暗半透明效果
透明度设置:WindowManager.LayoutParams lp=this.getWindow().getAttributes(); lp.dimAmount=0.5f; this.getWindow().setAttributes(lp); this.getWindow().addFlags(WindowManager.LayoutPara...原创 2019-01-21 17:36:08 · 1012 阅读 · 0 评论 -
Android smallestWidth屏幕适配方案
smallestWidth屏幕适配 非常简单并且比较理想的屏幕适配方案。关于讲其原理的文章已经很多很多,大神们的讲解十分精细,我只分享怎么使用,不善于讲解。1.首先在res下加入当然,去github搜索smallestWidth的源码中复制 里面已经都添加好了1-400dp6-48sp2.xml布局完全按照设计图的dp尺寸输入即可,会自动去目录下找最匹配屏幕最小宽度的文件夹 然后换算...原创 2019-01-21 17:30:59 · 514 阅读 · 0 评论 -
Android retrofit网络请求初步使用
retrofit是目前主流的Android网络请求框架,自己也是一步步学来的深知看大神代码的不易。在这里把自己一步步搭建的过程分享出来,也方便以后自己查看,废话到此为止。1.首先需要引入对应的依赖库。再app中添加 implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup...原创 2019-01-21 17:23:38 · 264 阅读 · 0 评论 -
Android 输入框获取焦点后改变颜色
一共需要三个xml文件(drawable目录下)1.没有获取焦点时的样式&lt;shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"&gt; &lt;corners android:radius="5dp&quo原创 2019-01-21 17:05:16 · 2164 阅读 · 0 评论 -
Android Fragment简单使用
一个Fragment的简单实例,代码比较粗糙,简单记录一下:XML文件:main.xml&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" a原创 2018-10-22 10:37:53 · 520 阅读 · 2 评论