
Android
文章平均质量分 61
小欣儿
我性格开朗,喜欢敲代码,喜欢和志同道合的朋友们交流。
展开
-
Android——Fragment 布局使用 fitsSystemWindows = true 无效解决方案
最近遇到一个奇葩问题,导航栏多个Fragment沉浸,fitsSystemWindows = true只在一个Fragment有效,其他Fragment都是无效的(即:toolbar和状态栏重叠)这种问题产生的原因:当第一个Fragment添加到Activity中的时候,Activity寻找出有fitsSystemWindows的子布局为其预留出状态栏的空间,其实就是设置一个padding,而其他Fragment添加到Activity中的时候,因为状态栏空间的适配已经被消费过一次了,Activity并不会转载 2022-05-24 15:08:10 · 2053 阅读 · 0 评论 -
Android——String.format()方法使用
format格式说明符语法: %[argument_index$][flags][width][.precision]conversion 语法解析:[argument_index$]: "1$" 第1个参数[flags]: "0" , "" 填充字符,数字用"0"或"",字符串用""[width]: "10","-10" 最后总宽度10,正数表示在前面添加,负数表示在后面添加。负数的情况一般只在字符串时才用[.precision] : ".3" 小数转载 2022-05-04 10:43:31 · 4824 阅读 · 0 评论 -
Android——横幅通知
横幅通知,也称为提醒式通知,效果如下图:这个效果在QQ,微信,钉钉等一些主流的App当中,大家一定很熟悉,今天就来说说如何实现。可能会触发提醒式通知的条件有如下3种:用户的Activiity处于全屏模式(应用使用fullScreenIntent)通知的优先级很高,且在搭载Android 7.1(API级别25)及更低版本的设备上使用铃声或震动。在搭载Android 8.0(API级别为26)及更高版本的设备上,通知渠道的重要程度比较高。但是现实往往是残酷的,当你按照要求照做之后发现8.0以原创 2021-06-25 18:00:39 · 8925 阅读 · 1 评论 -
Android——友盟自定义通知声音
最近接到一个需求,如题,给友盟推送添加定制化声音。描述很简洁,由上图可知,本次需求的重点工作是8.0以上版本的兼容问题。友盟给出的示例代码如下:由以上代码可知,其实就是设置一个自定义Notification,但是以上代码用在8.0以上系统中并不可行。原因大家应该都清楚了,8.0以上通知栏新增了一个NotificationChannel的特性,如果没有设置channel通知渠道的话,就会导致通知无法展示。设置本地声音现在再来回到我们本次需求的重点:定制声音。通过以上分析我们已经知道了友盟自定义声音原创 2021-05-19 17:51:10 · 1848 阅读 · 1 评论 -
Android——RecyclerView.scrollBy源码分析
最近有个需求是RecyclerView左右滚动时,如果焦点View超过屏幕中间就把焦点View滚到屏幕中间。实现思路为获取焦点View在屏幕上的坐标,并根据屏幕宽度/2来计算滚动距离。代码如下:FocusLinearLayoutManager layoutManager = (FocusLinearLayoutManager) provincesList.getLayoutManager();int firstVisiblePos = layoutManager.findFirstVisibleItem原创 2020-05-28 17:50:28 · 2304 阅读 · 0 评论 -
Android——详解Paint的setPathEffect(PathEffect effect)
一、setPathEffect()这个方法一看就和path有关,顾名思义,它就是给path设置样式(效果)的。PathEffect这个路径效果类没有具体的实现,效果是由它的六个子类实现的:这六个子类分别可以实现不同的路径效果:下面,我们来用代码来具体实现一下。二、测试代码2.1 代码框架首先初始化paint和path,然后配置相关属性,最后作画。package com.kale.c...转载 2019-11-19 18:47:40 · 1819 阅读 · 0 评论 -
Android——TextView 富文本之 ClickableSpan
前言ClickableSpan可以让我们在点击TextView相应文字时响应点击事件,比如常用的URLSpan,会在点击时打开相应的链接。而为了让TextView能够响应ClickableSpan的点击,我们需要为它设置LinkMovementMethod,但是这个LinkMovementMethod又有着很大的坑,接下来就总结下这些坑和我的解决办法。LinkMovementMethod的坑...转载 2019-11-19 18:35:34 · 2254 阅读 · 0 评论 -
Android——TextView的文字长度测量及各种padding解析
这篇博客会讲得比较杂:TextView里各种padding的含义?如何计算每行文字的长度?设置android:maxLines="1"和android:singleLine="true"有什么区别?为什么设置android:maxLines="1"时TextView的跑马灯效果就不能正常工作?TextView里各种padding的含义?虽然我们平时只用TextView显示纯文本数据...转载 2019-08-07 17:59:00 · 1960 阅读 · 0 评论 -
Android——SpannableString实现带圆角标签效果
本节是对以往章节的一个复习练习,用到的知识前面已经提到过,不知道的同学请参考前几篇文章。Android——SpannableString字体大小不一致垂直居中今天要实现的效果图如下:RadiusBackgroundSpanpublic class RadiusBackgroundSpan extends ReplacementSpan { private int fontSize...原创 2019-08-07 15:57:39 · 1596 阅读 · 0 评论 -
Android——SpannableString上标,下标垂直对齐
在上一节中我们已经了解,SuperscriptSpan和SubscriptSpan可以实现上标和下标效果,但是不可以改变大小,且显示位置固定。今天我们要实现的效果如下:TwoScriptTextSpan .javapublic class TwoScriptTextSpan extends ReplacementSpan { private int fontSize = -1; ...原创 2019-08-07 14:46:09 · 988 阅读 · 0 评论 -
Android——SpannableString实现顶部对齐(上标,下标)
上面两张图,大家应该很熟悉这就是上标和下标的效果,实现代码如下:上标:代码1:SpannableString ss = new SpannableString("RM123.456");SuperscriptSpan superScriptTextSpan = new SuperscriptSpan();ss.setSpan(superScriptTextSpan, 0, 2...原创 2019-08-06 18:58:38 · 4097 阅读 · 0 评论 -
Android——ImageSpan图片和文字实现垂直居中
默认情况,图片是底部对齐,如下图: 这里先抛出一个问题,怎么获取TextView最终显示的高度???由于上面那个问题我还没有找到答案,所以本节暂时以两个情况来分析,如何实现图片文字垂直居中。1、图片高度大于文字高度:这时,我们不需要处理图片,只需要处理文字显示的位置即可,可以使用上一节(Android——SpannableString字体大小不一致垂直居中)中的VerticalAlig...原创 2019-08-06 17:20:18 · 5408 阅读 · 1 评论 -
Android——SpannableString字体大小不一致垂直居中
用SpannableString来实现TextView的富文本效果(改变字体大小,设置颜色,设置图片,设置超链接效果等等),大家应该都已经用过很多次了。这里不再详述,今天我们主要讨论,当TextView中的文本字体大小不一致时如何垂直居中。首先,我们需要明确TextView绘制的基本度量标准,如下图:各个字段的具体解释可以参考这篇文章,写的非常详细。https://blog.csdn....原创 2019-08-06 15:48:58 · 8606 阅读 · 4 评论 -
Android——FragmentPagerAdapter与FragmentStatePagerAdapter区别
在一个 Android 应用中,我们使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动。不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希望能够通过调用 mAdapter.notifyDataSetChanged() 来触发 Fragment 页面使用新的数据调整或重新生成其内容,可是当我调用 notifyDataSetChanged...转载 2018-07-04 17:56:18 · 598 阅读 · 0 评论 -
Android——DialogFragment(二)封装创建通用的 CommonDialogFragment
对于DialogFragment不熟的同学请查看Android——DialogFragment(一)用法介绍首先看下我们将要实现的效果 1、创建通用的 CommonDialogFragment这个类是 DialogFragment 的子类,对 DialogFragment 进行封装,依赖外部传入的 AlertDialog 来构建,同时也处理了 DialogFragment 中 Ale...转载 2018-04-25 22:00:36 · 740 阅读 · 0 评论 -
Android——DialogFragment(一)用法介绍
1、 概述DialogFragment在android 3.0时被引入。是一种特殊的Fragment,它和Fragment有着基本一致的声明周期。用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。 在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。...转载 2018-04-25 20:58:02 · 893 阅读 · 0 评论 -
关于NestedScrollView嵌套RecyclerView页面载入时总是滑动到最底部
看标题是不是不太明白,来两张图片: 正常情况下,我们期待的是进入页面以后显示左图效果,可是由于NestedScrollView嵌套RecyclerView,导致Recyclerview占据焦点导致整个NestedScrollView内容上滑。知道原因以后解决这个bug就容易多了。方法一:在根布局设置android:d...原创 2018-04-20 11:57:03 · 7546 阅读 · 1 评论 -
Android——Recyclerview.scrollTo(int)无效问题解决
说到指定Recyclerview滚动到指定位置大家一定很熟悉,比如说节目续播,进入节目详情页,需要将剧集列表定位到具体某一集。方法很简单,但是现实很残酷,(⊙o⊙)…,坑有点多,好在最终问题都解决了,哈哈。下面就来分享下最近跳坑心路旅程。Recyclerview滚到指定位置,有两个方法:smoothScrollToPosition(int position)和scrollToPosit...原创 2018-04-19 18:57:07 · 11837 阅读 · 2 评论 -
Android内存优化——使用SparseArray和ArrayMap代替HashMap
在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到更好的性能,相反反而更消耗内存,所以针对Android这种移动平台,也推出了更符合自己的api,比如SparseArray、ArrayMap用来代替HashMap在有些情况下能带来更好的性能提升。...转载 2018-02-26 16:34:33 · 277 阅读 · 0 评论 -
Android——6.0 Scrollview嵌套Recyclerview导致显示不全,滑动卡顿问题解决
最近在6.0以后系统上连续遭遇了几次Scrollview嵌套Recyclerview问题的重击,于是乎决定把这部血泪史记录下来,供大家参考。在6.0以前我们通常也会碰到scrollview嵌套Recyclerview的嵌套问题,这时,我们采用的方法是在Recyclerview的外层添加一个RelativeLayout或者LinearLayout布局并给父布局添加属性:android:desce原创 2018-01-17 15:52:40 · 666 阅读 · 0 评论 -
Android——ListView中getChildAt(index)的使用注意事项
1.原理在很多时候ListView列表数据不需要全部刷新,只需刷新有数据变化的那一条,这时可以用getChildAt(index)获取某个指定position的view,并对该view进行刷新。 注意:在ListView中,使用getChildAt(index)的取值,只能是当前可见区域(列表可滚动)的子项! 即取值范围在 >= ListView.getFirstVisiblePosition()转载 2017-10-17 13:50:05 · 2215 阅读 · 0 评论 -
Android——实现m3u8视频缓存
1.M3U8协议HLS(HTTP Live Streaming)是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的基于HTTP协议的流媒体解决方案。在 HLS 技术中 Web 服务器向客户端提供接近实时的音视频流。但在使用的过程中是使用的标准的 HTTP 协议,所以这时,只要使用 HLS 的技术,就能在普通的 HTTP 的应用上直接提供点播和直播。在App Store中的转载 2017-10-09 11:23:49 · 18757 阅读 · 3 评论 -
Android——下载apk文件,并在通知栏显示下载进度
如何下载apk文件?这里介绍两种方式:一通过异步任务读取文件,二利用系统方法DownloadManager进行下载。原创 2017-09-27 18:27:17 · 5714 阅读 · 0 评论 -
Android——ViewPager无限循环滑动
说到ViewPager的无限循环滚动,可1、能大家都在熟悉不过了吧,表现效果就是:向右滑动,滑动到最后一页,继续滑动进入第一页,向左滑动则相反,滑到第一页若继续滑动则进入最后一页。原创 2017-09-21 18:21:19 · 2236 阅读 · 1 评论 -
Android——Activity和Fragment的爱恨纠葛
说起Activity和Fragment大家肯定都耳熟能详的,Fragment作为碎片可以重复使用,通常一个Activity里面可以添加多个Fragment,这是Fragment最基本的用法,今天我要说的是一些不常用的纠葛,比如:Fragment里嵌套Fragment;Fragment里嵌套Activity等。原创 2017-09-14 15:47:48 · 419 阅读 · 0 评论 -
Android——获取AndroidManifest.xml中的参数
获取application标签中的参数值原创 2017-08-24 20:12:12 · 3424 阅读 · 5 评论 -
Android——Timer停不下来的解决方法
最近在写定时更新播放器进度条的时候,发现播放结束时停止Timer和TimerTask之后,Timer还在运行,网上找了下原因,TimerTask的cancel方法一次只取消一个Task,这就会造成内存泄露,怎么解决这个问题呢?Timber还给我们提供了另外一个少有人知的方法purge()。这个方法是这么解释的:Removes all cancelled tasks from this timer’s原创 2017-08-02 16:33:00 · 4901 阅读 · 0 评论 -
Android——ARGB的透明度A的16进制参考表
透明度参照表:转载 2017-07-11 18:00:35 · 882 阅读 · 0 评论 -
Android自定义视图(二)——onLayout源码 流程 思路详解
简介:在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置 3.绘制——onDraw():如何绘制这个View。而第3步的onDraw系统已经封装的很好了,基本不用我们来操心,只需要专注到1,2两个步骤就中好了。 第一步的测量,可以参考我之前的文章转载 2017-07-05 17:59:37 · 307 阅读 · 0 评论 -
Android自定义视图(一)——onMeasure,MeasureSpec源码 流程 思路详解
简介:在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置 3.绘制——onDraw():如何绘制这个View。而第3步的onDraw系统已经封装的很好了,基本不用我们来操心,只需要专注到1,2两个步骤就中好了。 而这篇文章就来谈谈第一步,也是十分转载 2017-07-05 17:31:40 · 644 阅读 · 0 评论 -
Android——SeekBar自定义进度条背景无法充满的问题
最近在写播放器,要做一个自定义的进度条,方法挺简单的,重新写一个progressDrawable的背景xml文件就可以了。但是Seekbar的背景竟然无法填满,真是巨坑啊,网上找了好久终于解决了,今天总结出来告诉大家。 首先我们可以看下无法填充的效果图: 修改方法: 在Seekbar中添加属性: android:paddingStart="0dp"原创 2017-05-17 20:33:38 · 5137 阅读 · 0 评论 -
Android——通过GPS获取用户地理位置并监听位置变化
这个功能挺简单的,最近用到了就总结下:1、开启地理位置监听: /* * 开启地理位置监听 */ public void registerGpsListener(Context context) { Log.i(TAG, "registerGpsListener() start"); mLocationManager = (LocationM原创 2017-04-11 11:03:13 · 3518 阅读 · 0 评论 -
Android开发 - ActivityLifecycleCallbacks使用方法初探
ActivityLifecycleCallbacks是什么?Application通过此接口提供了一套回调方法,用于让开发者对Activity的生命周期事件进行集中处理。为什么用ActivityLifecycleCallbacks?以往若需监测Activity的生命周期事件代码,你可能是这样做的,重写每一个Acivity的onResume(),然后作统计和处理:@Override pro转载 2017-04-06 10:46:04 · 868 阅读 · 0 评论 -
Android Hybrid 和 WebView 解析
现在市面上的 APP 根据类型大致可以分为 3 类:Native APP、Web APP 和 Hybrid APP,而 Hybrid APP 兼具 “Native APP 良好用户交互体验的优势”和 “Web APP 跨平台开发的优势”,现在很多的主流应用也是使用 Hybrid 模式开发的。Hybrid 的优势与原生的体验差距Hybrid 的优势为什么要使用 Hybrid 开发呢,这就要提到 na转载 2017-04-01 15:12:07 · 1998 阅读 · 0 评论 -
Android虚拟按键适配Popupwindow
相信大家都遇到过带虚拟按键的手机,然后通常都会有个需求,让你做一个从底部弹出的Popupwindow,这时,当虚拟按键消失的时候你的弹出窗口页面就乱掉了,如何解决呢?请听我慢慢分析。1、解决虚拟按键遮挡Popupwindow问题一般来说有虚拟按键时,虚拟按键默认会遮盖窗口底部的画面,如下图:这时我们需要设置一下Popupwindow在有虚拟按键时的属性: 1、给popupwind...原创 2017-03-22 11:42:32 · 5915 阅读 · 3 评论 -
Android-在子线程中显示Toast和Dialog
Android中有句话说,只能在主线程(UI线程)中更新UI,这是因为Android的主线程(UI线程)是不安全的。所以在子线程如果要显示Toast或者Dialog,我们需要通知主线程来显示 ,有两种方法可以解决此问题:原创 2017-01-09 15:12:11 · 14943 阅读 · 0 评论 -
Android-软引用(SoftRefrerence)和弱引用(WeakReference)
一. WeakReference:防止内存泄漏,要保证内存被虚拟机回收。二. SoftReference:实现缓存机制转载 2016-12-28 15:40:33 · 1162 阅读 · 0 评论 -
将Gridview的item项设置成正方形
今天来讲一个炒鸡简单的例子啊,就是将Gridview的item项设置成正方形的,首先新建一个自定义的view让它集成LinearLayout或者RelativeLayout,这个根据个人布局来定啊,最后重写onMeasure方法啊,然后在使用时,使用SquareLayout作为父布局啊。太简单了,直接上代码吧。嘿嘿public class SquareLayout extends RelativeL原创 2016-12-15 14:57:09 · 3536 阅读 · 0 评论 -
Android——ViewPager实现3D画廊效果(ViewPager的加载动画)
这里写链接内容这个例子相信很多人已经接触过了,我今天觉得好玩自己写了写,参照了网上大家的一些例子,现在总结下自己的感受吧。ViewPager的用法android:clipChildren=”false”属性ViewPager切换动画一些注意事项部分代码ViewPager的基础用法 viewpager的实现还是比较简单的,viewpager中可以添加view,Activity和Frag原创 2016-11-03 17:55:49 · 10082 阅读 · 5 评论 -
Gradle build设置自动log开关
Gradle build设置自动log开关应用场景通常情况下我们的apps发布后也就是release模式下log是不显示的,debug模式下是显示log的,但是在特殊情况下我们测试release包的时候需要log的时候,就无法使用BuildConfig.DEBUG来达到要求,因为在release模式下自动设置为false,debug模式下是true,这个时候我们需要自定义可控制的log开关。Andr转载 2016-10-26 18:05:32 · 500 阅读 · 0 评论