- 博客(29)
- 收藏
- 关注
原创 cardview,button遮盖了别的控件。
FrameLayout、RelativeLayout。直觉上,在控件位置重叠时,xml处于底部的控件会出现在上层。但是CardView,Button这类的控件即便处于xml顶部,仍然会覆盖xml底部的控件。期望:实际:原因:CardView这类的控件默认会设置z轴高度来展示阴影。解决:...
2022-07-06 14:44:29
452
原创 安卓8.0,设置activity背景透明且设置方向,引发Only fullscreen opaque activities can request orientation问题。
安卓8.0同时设置activity为为透明且设置方向将引发引发Only fullscreen opaque activities can request orientation问题。
2022-06-20 11:21:41
335
原创 viewpager懒加载
实现懒加载的方法构造pagerAdapter时设置mBehavior。 FragmentPagerAdapter fragmentPagerAdapter = new FragmentPagerAdapter( getSupportFragmentManager(), FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT )在fragment的onResume中加载数据。设置BEHAVI
2021-04-08 11:23:19
732
原创 android studio debug无法获取local变量
gradle文件buildTypes { debug { minifyEnabled false testCoverageEnabled false } }
2021-01-14 15:22:24
543
原创 clean code 代码整洁之道 读书笔记
有意义的命名命名需明确其作用。命名需避免误导。做有意义的区分。使用能读的出来的命名。使用可搜索的名称。类名应该是名词或名词性短语。方法名应当是动词或动词短语。不要使用俗语、俚语作为命名。相同的概念应使用相同的词,如get方法代表获取。赋予命名语境,“state”无法得知与地址有关,使用addressState会好很多。更好的方案是创建Address。不要添加多余、没用的语境。函数短小,函数的缩进层级不应多于一层或两层。只做一件事。一个函数一个抽象层级,使得代码是自顶向下的
2021-01-06 17:20:15
119
原创 Retrofit + RxJava
使用Retrofit封装网络请求,使用Rxjava处理发起请求以及接下来处理结果的流程。定义网络请求接口public interface RetrofitService { @GET("query") Call<PostInfo> getPostInfo(@Query("type") String type, @Query("postid") String postid);}初始化RetrofitRetrofit retrofit = new Retrofit.Bui
2020-12-24 18:50:18
206
4
原创 rxjava使用小结
定义rxjava是一个基于事件流、实现异步操作的库。作用实现异步操作,类似与asyncTask,handle。意义当需要在后台进行操作,操作完再回调主线程进行ui展示时,若使用经典的异步实现,则会存在多重嵌套的情况,难以读懂。 @Override public void run() { super.run(); for (File folder : folders) { File[] files = folder.listFi
2020-12-24 16:00:02
91
原创 EventBus的使用
EventBus是一款轻量级事件发布/订阅轻量级框架,可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。注册和取消注册在activity的生命周期中,进行注册的取消注册的操作。如在onCreate中注册,在onDestroy中取消注册。//注册EventBus.getDefault().register(MainActivity.this);//取消注册EventBus .ge
2020-12-24 14:56:25
154
原创 android判断手机是否为24小时制
android.text.format.DateFormat.is24HourFormat(getContext())
2020-05-28 11:20:19
597
原创 系统回收app资源后发生空指针异常的三两事
最近公司的项目经常发生一个奇怪的bug,fragment中的一个成员变量device经常发生空指针异常,但是这个device是从单例中拿到的对象,理论上不论发生何种情况从单例中拿到的对象都不应该为空。在正常的流程里找了很久这个bug发生的原因未果,后来想是不是app被系统回收资源之后发生的异常,经过一系列的debug发现,单例中的拿到的对象依旧不为空,只是成员变量device为空。解决:深究发...
2020-04-20 14:24:10
474
原创 嵌套滑动的LinearLayout(滑动隐藏头部的LinearLayout),滑动时先隐藏头部(第一个子控件)再滑动recyclerview
需求:LinearLayout内部包含一个头部和一个recyclerview。recyclerview可滚动,滚动时如果头部仍在可见则先滚动LinearLayout直到头部消失,再开始滚动recyclerview。思路:自定义LinearLayout实现NestedScrollingParent,getChildAt(0)获取头部,...
2020-04-07 14:59:14
539
原创 高度动态适应的viewpager,高度随子view高度变化
概要需求:viewpager左右滑动后需加载信息(转圈loading),loading时viewpager的高度要求与之前的页面高度相同。在loading结束后根据页面内容重新自适应viewpager的高度。前言:在网上找了些viewpager自适应的实现方案,清一色都是在onMeasure中测量所有子view的高度并将最高的高度作为viewpager的高度。此方案的缺点在于从较高的view切...
2020-04-02 10:57:41
1301
原创 android多线程知识点整理
线程在Android中是个很重要的概念,从用途来说,线程分为主线程与子线程,主线程用于处理界面相关事情,子线程用于执行耗时操作。除了Thread本身外,AysncTask,IntentService及HandleThread在安卓了都扮演着线程的角色。AysncTask:底层封装了线程池和Handler,方便开发者在子线程中更新ui。Handler:具有消息循环的线程,内部可以使用Handle...
2020-03-03 15:40:38
342
转载 camera预览画面,进入子页面,连续锁屏再进入app,返回相机预览页面黑屏。
解决方法:Activity onPause方法,将surfaceview设置成visible,onResume方法设置为gone。网上的分析:原文锁屏下相机资源的释放问题为了节省手机电量,不浪费相机资源,在开发的自定义相机里,如果预览图像已不需要显示,如按Home键盘切换后台或者锁屏后,此时就应该关闭预览并把相机资源释放掉。参考官方API文档,当surfaceView变成可见时,会创...
2020-01-02 16:19:38
1166
1
原创 Glide源码分析笔记
with()函数with函数有多中重载,其参数可能为Context参数,Activity参数,Fragment参数等。glide的加载生命周期会与此参数相关,当该参数销毁时,glide不在继续加载图片。1.当参数为Application时,加载周期与程序生命周期相同不做特殊处理。2.当参数为activity、fragment时,glide会向activity中新增一个空的fragment以监...
2019-12-28 15:20:41
88
1
原创 多张bitmap转gif,并使用DiskLruCache在本地缓存
多张Bitpmap转gif使用AnimatedGifEncoder将bitmap生成gif并存在ByteArrayOutputStream 中。AnimatedGifEncoder是在glide中的一个类,但是后来glide已将该类删除。此文最后附AnimatedGifEncoder代码。 public static void getGifBytesFormYuvList(String f...
2019-12-26 18:18:13
679
原创 Synchronized用法
synchronized分对象锁和类锁,对象锁主要为了保证普通变量的线程安全,相反类锁是为了保证静态变态的线程安全。synchronized修饰实例方法(对象锁) public synchronized void run() { for (int i = 0; i < 5; i++) { } }synchronized修饰静态方法(类锁...
2019-12-23 15:13:55
111
原创 内存泄漏
内存泄漏长生命周期的对象持有短生命周期的对象,会导致短生命周期的对象无法被回收,形成内存泄漏。强引用:系统宁愿抛出异常也不轻易回收强引用对象。弱引用:在内存即将溢出前将弱引用进行回收吗,若回收后仍会发生内存溢出则抛出异常。弱引用:在发生回收事件时,即刻回收弱引用对象。单例造成内存泄漏单例对象会使用static修饰,生命周期即为全局声明生命周期。若其持有较短生命周期的对象则会造成内存泄漏...
2019-11-19 16:09:31
86
原创 videoView / surfaceView 播放前闪屏/黑屏/白屏问题
1.将videoView / surfaceView背景设置为你想要的颜色<VideoView android:id="@+id/video_viewer_video_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="c...
2019-10-11 15:19:36
2608
1
原创 可缩放、双指放大的videoview
public class AlbumVideoView extends VideoView implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { private static final String TAG = "AlbumVideoView"; priva...
2019-09-30 14:32:30
506
1
原创 分享、用第三方app打开视频或图片
分享分享到其他app Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType(bean.getType() == VIDEO ? "video/*" : "image/*"); Uri contentUri...
2019-09-30 14:13:00
644
原创 自定义相册,AsyncQueryHandler异步进行数据库操作,Glide展示图片
自定义相册获取数据库图片和视频的列表:使用AlbumAsyncQueryHandler异步进行数据库操作此处注意handler造成的内存泄漏。public class AlbumAsyncQueryHandler extends AsyncQueryHandler { public static final String TAG = "AlbumAsyncQueryHandler...
2019-09-30 12:22:57
182
原创 Gson使用
此文仅作为笔记,部分参考于:1.http://www.jianshu.com/p/0e40a52c00632.《第一行代码》类json:{"name": "TOM", "age": "20"}json -> 类: Gson gson = ne Gson(); Person person = gson.from(jsonString, Person.Class)类 ->...
2019-09-30 11:46:03
121
原创 二维码保存到相册以及识别相册中的二维码-zxing
二维码Zxing相关生成二维码并保存至相册1.保存二维码到相册需要系统“WRITE_EXTERNAL_STORAGE”权限。使用前需先动态申请权限。检测权限接口如下: /** * Determine whether <em>you</em> have been granted a particular permission. * * @...
2019-06-14 17:44:35
4999
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人