![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 60
Crazy高
坚持创新,勇于面对问题,追求自在,追求个性化
展开
-
通过LayoutParams动态修改ScrollView高度无效的原因及解决方式
【代码】【无标题】原创 2024-04-08 11:43:00 · 262 阅读 · 0 评论 -
Android Studio里面找不到连接设备问题
当我们在Android Studio里面调试程序时,常常遇到找不到设备的问题,即便是手机调试模式已经打开,且手机驱动已经安装好,有时同样还是会出现这个问题,那么该问题具体该怎么解决呢?开启USB调试模式Android设备在连接时,必须要打开“开发者选项”中的“USB调试”才能连接;确认连接状态通过 USB线连接好电脑和设备后,有的设备需要同意“允许USB调试”访问设备数据才能连接;选择USB正确的连接方式使用 USB线连接好电脑和设备后,默认USB连接方式是“仅充电”,如果 开发原创 2020-10-27 13:08:34 · 2894 阅读 · 1 评论 -
利用ZXing实现远距离扫描二维码逐级放大效果
思路:当要扫的二维码处于扫描框中时,获取该二维码在扫描框中的宽度,与扫描框的宽度进行对比,小于扫描框宽度的1/4,则认为二维码在扫描框中较小(镜头较远),则需要放大摄像头焦距,而不需要移动手机来调整。放大焦距。解码流程将图像进行二值化处理,1、0代表黑、白。寻找定位符、校正符,然后将原图像中符号码部分取出。(detector代码实现的功能)。对符号码矩阵按照编码规范进行解码,得到...原创 2020-02-28 16:10:44 · 3203 阅读 · 0 评论 -
Android 最强大的工具类blankj:utilcode
github地址:https://github.com/Blankj/AndroidUtilCodeDownloadGradle:implementation ‘com.blankj:utilcode:1.23.2’APIsActivity 相关 -> ActivityUtils.java -> DemogetActivityByView : 根据...原创 2019-11-11 17:35:22 · 5916 阅读 · 1 评论 -
双缓冲技术原理以及优缺点
创建一幅后台图像,将每一帧画入图像,然后调用 drawImage()方法将整个后台图像一次画到屏幕上去。 优点:双缓冲技术的优点在于大部分绘制是离屏的。将离屏图像一次绘至屏幕上,比直接在屏幕上绘制要有效得多。双缓冲技术可以使动画平滑。 缺点:要分配一个后台图像的缓冲,如果图像相当大,这将占用很大一块内存。Java GUI库画图时实现双缓冲: ...原创 2018-06-11 16:16:46 · 5102 阅读 · 0 评论 -
Android 开发中遇到的坑
1、AlertDialog上弹Toast或者其它对话框,AlertDialog将消失,解决办法自定义对话框继承自Dialog。2、style命名不能与控件同名:例如: <style name="Button"/> <style name="Button.CommonButton" parent="Button&原创 2017-08-25 10:37:57 · 678 阅读 · 0 评论 -
Android程序入口,Looper、MessageQueue、Handler之间的关系
android.app.ActivityManagerActivityManager负责ActivityThread的创建,Activity生命周期的维护android.app.ActivityThread该类中的main方法是Android应用的入口,每个apk中都包含一个且仅有一个ActivityThread类,并作为应用的主线程类。ActivityThread类管理主线程(U...原创 2016-12-29 18:33:17 · 261 阅读 · 0 评论 -
Android横竖切屏生命周期回调情况
当未设置android:configChanges=”orientation”时:第一,首次进入Activity会回调的生命周期是:第二,竖屏切换为横屏第三,再从横屏切换为竖屏,26的buildTools,5.0以上的Android系统会出现下图,实际之前的编译版本会出现的两次生命周期创建和销毁,这个原因可能是系统版本或编译版本不同导致的: onSaveInstanceState onPause原创 2017-10-12 17:29:39 · 745 阅读 · 0 评论 -
Toast 在子线程中使用的问题
通常情况Toast是不允许在子线程中使用的如下代码,Toast初始化的时候会new Handler(),无参构造默认获取当前线程的Looper,如果没有prepare过,则抛出 Can’t create handler inside thread that has not called Looper.prepare()异常。new Thread(){ public void run(原创 2017-09-12 09:23:33 · 560 阅读 · 0 评论 -
聊一聊 Android 6.0 的运行时权限
权限一刀切 棉花糖运行时权限 权限的分组 正常权限 正常权限列表 特殊权限 请求SYSTEM_ALERT_WINDOW 请求WRITE_SETTINGS 危险权限 必须要支持运行时权限么 不支持运行时权限会崩溃么 然而有点糟糕的是 该来的还得来 一个标准的流程 如何批量申请 申请这么多权限岂不是很累 注意事项 API问题 多系统问题 两个权限 些许建议 注意转载 2017-09-19 16:14:35 · 283 阅读 · 0 评论 -
关于Android6.0以后在线升级无法调出系统安装器的解决办法
由于Android6.0以后系统将权限分为普通权限和危险权限,还有两个特殊权限SYSTEM_ALERT_WINDOW(设置悬浮窗,进行一些黑科技)和WRITE_SETTINGS(修改系统设置),因此对于权限的申请,除了要在manifest中声明权限,还需要在运行时动态申请权限。所以某些操作会因权限问题,而使App无法正常使用,甚至崩溃。而为了兼容Android7.0以上系统的调用系统安装器功能...原创 2018-05-18 11:27:05 · 711 阅读 · 0 评论 -
Android Studio的Gradle配置注意事项
第一次安装Android Studio安装完成后,第一次启动AS前,为了避免重新下载新版本的SDK,需要做如下操作:AS启动前,打开安装目录,请先将bin目录的idea.properties文件中增加一行:disable.android.first.run=true就行了,避免第一次打开AS时自动重新下载SDK。 mac平台的右键安装包->Show Package Contents 就...原创 2018-04-28 12:17:16 · 272 阅读 · 0 评论 -
广播接收器的生命周期解读
广播接收器只有一个回调方法: void onReceive(Context curContext, Intent broadcastMsg) 当广播消息抵达接收器时,Android 调用它的 onReceive()方法并将包含消息的 Intent 对象传递给它。广播接收器仅在它执行这个方法时处于活跃状态。当 onReceive()返回后,它即为失活状态。 广播接收器超过10s没执行完毕就会报...原创 2018-06-11 15:47:45 · 486 阅读 · 0 评论 -
Android P 9.0以上系统,HTTP接口无法访问的解决办法
Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉解决方案一:在资源文件新建xml目录,新建文件network_security_config.xml清单文件的application里配置:解决方案二:让服务端将接口的http全部改成https就好了注意:android:networkSecurityConfig 这个属性必须在api24以上才有的,低于...原创 2019-06-05 16:31:04 · 3058 阅读 · 0 评论 -
各种Android UI开源框架
自己总结的Android开源项目及库。 github排名 https://github.com/trending,github搜索:https://github.com/searchAndroid库学习收集QQ群: 339129051 欢迎入群。目录UIUI卫星菜单节选器下拉刷新模糊效果HUD与Toast进度条UI其它动画网络相关响应式编程地图数据库图像浏览及处...转载 2019-06-18 16:26:39 · 1593 阅读 · 0 评论 -
Android Parcelable接口打包List对象问题
如下图所示:List对象读取的时候,有可能为空,因此需要在read之前先new一个List原创 2019-09-06 11:30:05 · 462 阅读 · 0 评论 -
Service(服务组件)使用简介
Service(服务组件)使用简介Service启动方式有startService和bindServic两种startService生命周期是onCreate–>onStartCommand–>onStartbindService生命周期是onCreate–>onBind–>onServiceConnectedstopService生命周期是onDestroyu...原创 2019-09-07 15:45:50 · 656 阅读 · 0 评论 -
Drawable实现分层
Drawable实现分层,类似于FrameLayout的用法,第二个Item的shape会盖住第一个Item的shape,但是可以通过Item的Top/Bottom/Left/Right等属性实现间距<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/原创 2016-10-19 10:45:45 · 399 阅读 · 0 评论 -
第一次使用Android Studio时你应该知道的一切配置
http://www.cnblogs.com/smyhvae/p/4390905.html转载 2017-08-23 14:25:47 · 199 阅读 · 0 评论 -
数据库游标限制
Android SQLite数据库的(游标打下)连接数限制为1024kb,当超过限制,将报游标溢出的异常。GreenDao 使用完后,需要在解绑P层的地方调用DaoSession.Clear()方法。原创 2017-06-21 15:12:01 · 785 阅读 · 0 评论 -
关于Activity的按键事件监听的坑
1、dispatchKeyEvent(KeyEvent event) 2、boolean onKeyDown(int keyCode, KeyEvent event) 3、boolean onKeyUp(int keyCode, KeyEvent event) 如果activity存在抢焦点的控件,比如EditText,那么有时候监听Enter点击事件,用2或者3的方法监听会失效,所以最好使用原创 2017-05-04 20:09:00 · 404 阅读 · 0 评论 -
GreenDao3 使用说明
GreenDao 3 一个将对象映射到 SQLite 数据库中的轻量且快速的ORM解决方案资料 Github官网android-database-sqlcipher Github 数据库加密GreenDaoUpgradeHelper Github 数据库升级辅助导入 配置项目的 build.gradle buildscript { repositories {翻译 2016-12-20 17:01:53 · 1582 阅读 · 0 评论 -
dispatchkeyevent的调用机制
dispatchKeyEvent和onKeyDown关系:当键盘按下时 首先触发dispatchKeyEvent 然后触发onUserInteraction 再次onKeyDown 如果按下紧接着松开,则是俩步 紧跟着触发dispatchKeyEvent 然后触发onUserInteraction 再次onKeyUp1)当我们重写了onKeyDown方法后,如果return fals原创 2017-01-03 19:11:54 · 2060 阅读 · 0 评论 -
Android 关于Shape画ring和line的问题
Shape为ring属性时,注意如下几点: 1、android:useLevel=”false”该属性须设置为falseandroid:useLevel="boolean" //如果当做是LevelListDrawable使用时值为true,否则为false2、以下属性只适用于ringandroid:innerRadius="dimension" //内环半径 android:inne原创 2016-12-08 11:22:47 · 5786 阅读 · 0 评论 -
用RecyclerView展示列表时注意的问题
有时我们发现在写RecyclerView的Adapter的Item布局中,Width明明是用的match_parent属性,但界面却呈现的是wrap_content的效果,这时应该注意:1、根容器LinearLayout改为RelativeLayout 2、具体的控件应该改为match_parent原创 2016-11-17 13:57:22 · 185 阅读 · 0 评论 -
列表、网格等多条目数据控件在内存中实现过滤(筛选)
第一步:Adapter中实现Filterable接口(该接口通常是在Adapter中使用)public class ExceptionWaybillAdapter extends BaseAdapter<ExceptionWaybill> implements Filterable { private WaybillFilter filter; private OnFilterList原创 2016-10-18 11:19:57 · 461 阅读 · 0 评论 -
各类开源库使用
//异常收集库 debugCompile ‘me.drakeet.library:crashwoodpecker:0.9.81’ releaseCompile ‘me.drakeet.library:crashwoodpecker-do-nothing:0.9.7’下拉刷新项目的替代方案。继承于ViewGroup可以包含任何View。 功能比SwipeRefreshLayout强大。支持所有原创 2016-10-27 15:35:12 · 262 阅读 · 0 评论 -
用google官方控件SwipeRefreshLayout实现RecyclerView的下拉刷新和上拉加载
Java源码如下:public class PullRecyclerView extends LinearLayout implements SwipeRefreshLayout.OnRefreshListener, View.OnTouchListener { private SwipeRefreshLayout swipeRefreshLayout; private Recycle原创 2016-10-13 16:00:27 · 400 阅读 · 0 评论 -
限制EditText只能输入数字和字母
限制EditText只能输入数字和字母第一步,新建如下类:public class AlphanumericDigits extends DigitsKeyListener { private Context context; public AlphanumericDigits(Context context) { this.context = context;原创 2016-09-08 20:46:34 · 338 阅读 · 0 评论 -
CheckStyle-IDEA插件在Android Studio或IntelliJ IDEA的使用
第一步 下载CheckStyle-IDEA插件以下是已经安装的情况未安装请先安装(点击Browse repositories–>再搜索CheckStyle–>找到CheckStyle-IDEA–>再点击Install–>自动安装完成后重启AS) 第二步 导入规则文件找到Other Settings –>点击Checkstyle–>再点击Configuration File的加号 先填写规则描述名原创 2017-02-07 12:01:10 · 3184 阅读 · 0 评论 -
真正与Activity能交互的回调以及Activity退入后台方法
//监听activity是否有焦点,是否能与用户交互@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { IntentFilter filter = new原创 2017-02-16 12:13:16 · 578 阅读 · 0 评论 -
关于Activity的按键事件监听的坑
1、dispatchKeyEvent(KeyEvent event) 2、boolean onKeyDown(int keyCode, KeyEvent event) 3、boolean onKeyUp(int keyCode, KeyEvent event) 如果activity存在抢焦点的控件,比如EditText,那么有时候监听Enter点击事件,用2或者3的方法监听会失效,所以最好使用原创 2017-05-04 20:07:38 · 1683 阅读 · 0 评论 -
Git 的 .gitignore 配置
.gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得。1、配置语法: 以斜杠“/”开头表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表; 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录; 此外,git 对于 .ignor转载 2017-04-21 16:05:47 · 175 阅读 · 0 评论 -
GreenDao数据库升级方案
GrenDao的深入使用在本文中将会讲解一些使用GreenDao的FAQ(Frequently Asked Questions经常遇到的问题)混淆### greenDAO 3-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {public static java.lang.String TABLENAME;原创 2017-03-20 12:15:58 · 314 阅读 · 0 评论 -
判断软键盘是否开启
/** * 判断键盘是否开启 * * @return */ private boolean isSoftShowing() { //获取当前屏幕内容的高度 int screenHeight = getWindow().getDecorView().getHeight(); //获取View可见区域的bot原创 2017-02-14 16:46:13 · 542 阅读 · 0 评论 -
带清除内容的EditText,支持运单格式的输入模式
package com.sfnp.warehouse.widget;import android.content.Context;import android.graphics.drawable.Drawable;import android.text.Editable;import android.text.TextWatcher;import android.util.Attribute原创 2017-02-08 17:27:08 · 295 阅读 · 0 评论 -
Android 单元测试介绍
1、JUnit 最基础、应用最为广泛的单元测试框架 2、Mockito Java中最流行的mock(模拟)测试框架,只能mock出public 3、PowerMock 可以mock静态、final、private方法的框架 4、编写测试用例JUnit是什么?JUnit用于编写和运行可重复的自动化测试开源框架,保证代码按预期工作Junit有哪些作用?1、断言测试预期结果 2、测试功能共享通用的原创 2017-02-09 12:10:24 · 322 阅读 · 0 评论 -
Android 内存释放与泄漏的一点理解
例如class A: A a = new A(); a 是引用,new A()是实例,实例是需要分配内存 如果引用a没有赋值,那么引用a就相当于null,因此引用是不会占用内存,当实例new A()没有任何被引用指向,那new A()会被GC回收例如class B implements Callback: 当B需要调用请求数据的方法,且需要传Callback的实现时,那么B的实例将被方法内的原创 2017-02-08 15:50:24 · 268 阅读 · 0 评论 -
Android Studio 或IntelliJ IDEA 编译时报内存溢出的配置
加入如下图配置原创 2017-02-08 14:43:17 · 1340 阅读 · 0 评论 -
Android两种播放声音的方式
Android两种播放声音的方式public class SoundUtils { /** * 播放声音 不能同时播放多种音频 * 消耗资源较大 * @param rawId */ public static void playSoundByMedia(int rawId) { try { MediaPla原创 2016-09-26 17:50:13 · 17587 阅读 · 3 评论