自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lindroid的博客

不积跬步,无以至千里。

  • 博客(50)
  • 资源 (7)
  • 收藏
  • 关注

原创 Android 监听软键盘的高度并解决其覆盖输入框的问题

1、前言在某些项目中,我们常常需要自定义一个输入框,软键盘弹出时就把输入框顶上去,关闭时输入框再回到原位(比如下方的效果图,实际上各种 App 中的聊天界面和发布评论的界面大体都是这样)。在这个过程中,除了输入框以外的其他界面的元素不受影响,比如效果图中的背景图片不会上移也不会被压缩。但在实际使用中发现软键盘在弹出时常常把输入框盖住,导致输入框显示不完全。有什么方法可以解决呢?2、思路分析2.1 获取软键盘的高度网上常见的思路是这样的:在输入框的下面放置一个View,当软键盘弹出时,获取软键盘高度

2022-02-13 21:09:24 4385

原创 Retrofit + Kotlin + MVVM 的网络请求框架的封装尝试

1、前言之前在学习郭霖《第一行代码》时按部就班地写过一个彩云天气 App,对里面的网络请求框架的封装印象非常深刻,很喜欢这种 Retrofit + Kotlin + 协程的搭配使用。随后也在自己的项目里参考了这部分的代码。但随着代码的深入编写和功能的复杂,原来的框架已经无法满足我的使用了。原主要有如下的痛点:缺少失败的回调显示加载中动画比较麻烦后面我自己试着努力去封装一个简单易用的框架,可惜个人能力有限,自己封装的框架总是不如人意。好在还有很多优秀的博客和代码可供参考。在此基础上,对彩云天气 A

2021-11-07 12:11:21 1688

原创 MultiStateLayout:灵活易用的Android多状态视图布局

在GitHub上有一款很不错的Android多状态布局:MultipleStatusView,在之前的项目中我一直都使用它,但慢慢地,我发现了它的一些不便之处:配置比较死板。视图根布局的Id、点击重连控件的Id都必须按照文档的写死,如果不一致或者漏掉可能会导致一些奇怪的bug。视图状态比较有限。需要自定义一个状态视图(比如需要登录视图)的话比较麻烦,如果采用MultipleStatus...

2020-02-17 23:25:29 1146

原创 Kotlin之在Gradle中无参(no-arg)编译器插件的使用

前言最近在用Kotlin+Spring Boot写一个后端项目,实体类习惯性地用了Kotlin中的data class,但是Spring要求要有一个无参的构造函数,否则可能会抛出java.sql.SQLDataException。要使data class能够生成一个无参的构造函数,有两种方法可以做到:1.给data class的构造函数中的每一个参数都赋上默认值。比如:data class ...

2019-11-10 11:40:27 1286

原创 Android之调节屏幕亮度

1、需求分析在使用微信或者支付宝的付款码支付时,如果你点击放大付款码,就会跳转到一个新的页面去显示大尺寸的付款码,而且你会发现屏幕变亮了,这样会便于扫码机识别你的付款码。当你付款成功退出付款码放大的界面后,屏幕就会恢复到原先的亮度。我很早就注意到了这点,所以当我自己的项目需要做二维码点击放大功能时,我也在放大的同时把屏幕的界面调亮一点。尽管我当时比较轻松地实现了这个功能,但是当我编写屏幕亮度工具...

2019-03-17 16:05:18 10951 2

原创 Android布局优化三剑客

前言在编写Android布局时总会遇到这样或者那样的痛点,比如:有些布局的在很多页面都用到了,而且样式都一样,每次用到都要复制粘贴一大段,有没有办法可以复用呢?解决了1中的问题之后,发现复用的布局外面总要额外套上一层布局,要知道布局嵌套是会影响性能的呐;有些布局只有用到时才会显示,但是必须提前写好,虽然设置了为invisible或gone,还是多多少少会占用内存的。要解决这些痛点,我...

2018-09-21 13:26:48 382

原创 Android之Activity设置主题背景后AlertDialog的背景随之改变的问题

在制作App的闪屏页时如果你仔细观察就会发现,每次你在手机桌面点击图标启动应用时会先出现一个白色背景(也就是我们通常所说的白屏),然后才会跳转到闪屏页。就像这样:关于如何解决启动时的白屏问题,大家可以参考这篇博客: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法。解决的方法很简单,就是在SplashActivity的主题中将背景设置成给闪屏页一样的图片:...

2018-07-21 20:31:10 4001 2

原创 能伸能缩的ExpandableListView(仿智联招聘专业选择列表页面)

一、前言前些日子项目中需要实现一个类似于智联招聘的专业选择页面,简单地说就是点击一级专业列表中的某一项就会展开二级专业列表,一级列表就是一个个组(组选项),二级列表就是一个组里面的成员(子选项)。智联招聘的效果如下:现在的主流列表控件毫无疑问是RecyclerView,所以你也许会想到用一个RecyclerView来显示组列表,然后在其item里面再嵌套一个RecyclerView...

2018-04-30 17:25:53 664

原创 Android之新版本的属性在styles.xml中命名空间写法

在做多语言适配的时候总会遇到一个很头疼的问题:某些内容中文只有短短两三个字,可翻译成英文之后就是一连串的字符,如果TextView的宽度是wrap_content的话就会骤然变宽,把其它的控件挤到一边,整个界面显得特别凌乱。过去解决这种问题通常有两种方案:固定TextView的宽高。保持了界面的美观和统一,但是字符过长时会显示不全;为每种语言都写一个布局。这样可以适配不同语言的布局,但是由...

2018-04-22 14:43:13 1700

原创 Android之文本日期混合滚轮选择器(仿Boss直聘)

1、需求分析GitHub上面有一款iOS风格的滚轮选择器Android-PickerView,它分为时间选择器代码TimePickerView和选项选择器OptionsPickerView,不但可以选择时间日期,可以选择我们自定义的数据,比如性别、年龄等。我一直都用它。直到最近遇到了一个需求,它的选项里面既有文字也有时间,大体效果如Boss直聘添加项目经验中的时间选择功能:从图中我...

2018-02-11 09:25:49 2223

原创 Android之ImageView加载图片保持宽高比

1、前言有时候,我们在应用中加载图片时并不知道图片确切的宽高数值,但是需要保持宽高比,比如我就遇到这样的设计:图片的宽度填满屏幕,宽高比例为16:9,高度根据这个比例自适应。这样加载出来的图片就形同一张卡片。由于不同手机的屏幕宽度不一样,所以图片宽高无法提前在布局中确定,但好在我们还是可以在代码中动态实现的,现在我们就来看看吧。2、UI布局为了便于比较,我在布局中放置了两个Imag

2018-01-18 15:47:19 5448

原创 仿饿了么悬浮购物车按钮

1、需求分析及思路分析今天新鲜出炉的需求来了:产品要在首页上放置一个悬浮图标,这个图标既起着宣传的作用(图标上面有活动标题),也是一个按钮,点击之后能跳转到某个详情页面。而且为了用户体验更好,在滑动界面时,这个图标要乖乖地藏起来,不能影响用户操作。我仔细分析了一下,哟,这不就是中午点外卖时用的饿了么上面的购物车按钮么?用户没有触摸界面时,购物车就正常悬浮在右下角,当界面滑动时,它就自觉地将自身的一半

2017-12-24 21:05:55 3621 4

原创 新建Module作为依赖库后出现“unspecified on project app resolves to an APK archive which……”错误的解决方法

今天在工程中新建了一个module作为app module的依赖库,在Project Structure中添加依赖之后却报出了如下的错误: unspecified on project app resolves to an APK archive which is not supported as a compilation dependency这是因为我们在新建一个module的时候是默认作

2017-12-11 22:27:00 696

原创 利用Activity实现一个简单的可输入对话框

1、需求分析在应用中这样那样的评论总是少不了的,有的应用是在底部直接加一个EditText和一个Button,让用户输入文字或者表情之后点击按钮提交;而有的虽然也放置了EditText,但仅仅是一个“摆设”,并不具备输入功能,用户点击它后会弹出一个跳转到一个可以真正编辑的页面或者弹出一个可以输入内容的对话框。比如下面这种效果:这里的效果可以细分为四点: 1. 点击底部的按钮之后会弹出...

2017-10-22 23:14:31 1247

原创 Android之单方向滑动的Viewpager

前一阵子在项目中遇到一个很奇葩的需求,用户注册登录的页面是分成一张张卡片的,填完一张卡片的信息才能进入下一步。我首先想到的是ViewPager,ViewPager的每个页面用Fragment填充即可。但是之前使用的ViewPager的每一个页面的左右都是紧密相连的,两个页面之间没有间隙。好在终于找到了一个第三方库可以解决这个问题:仿魅族BannerView这是一个模仿魅族广告轮播的第三方库,两个页面

2017-09-28 20:27:07 1672

原创 RecyclerView添加分割线的简便方法

1、前言刚开始学习RecyclerView的时候我跟着一个视频学的,当时添加分割线是从外面导入一个Java类,然后使用里面的函数来创建分割线的,所以一直以来我都是这样做的。直到前几天才无意中发现,原来v7包中提供了一个DividerItemDecoration类,利用它,我们可以很简单地实现RecyclerView的分割线!那还等什么呢?赶紧用起来。2、创建一个简单的RecyclerView首先当然

2017-07-30 22:07:23 79634 22

原创 见与不见,你说了算:Android之设置密码是否可见

我们在注册或者登录App时,难免会需要输入密码。有时候我们身旁可能有其他人在,为了不让密码“赤裸裸”地暴露在他人眼皮底下,密码字符串通常会默认显示为暗文(也就是星号或者圆点)。但还有一种情况是我们在输入密码时有时会小手一抖,会多按几下或者输错了密码,因为都是暗文,我们就只好把密码全都删掉重新输入了。这个时候我们就又怀念起能看到密码的日子了。那么有没有方法让密码在明暗文中来回切换呢。答案是肯定的,而且

2017-07-30 15:28:55 1482

原创 Android使用CountDownTimer实现短信验证码倒计时

等待总是让人感到焦急和厌烦的,特别是看不到进展的等待。所以为了不让用户痴痴地等,我们在进行某些耗时操作时,一般都要设计一个进度条或者倒计时器,让进度可视化,告诉用户“等待之后更精彩”。在使用短信验证码注册或者登录App就可以看到这样的设计:点击“发送验证码”的按钮之后,按钮上就会出现倒计时(一般为60秒),倒计时结束之后,按钮的文字就会变成“重新发送”。在Android中要实现这样的效果可以使用Ha

2017-06-26 17:08:26 1171

原创 当Toast遇上色彩:Android第三方库Crouton学习笔记

Toast大家都不会陌生,就是经常在界面上弹出的带有提示信息的半透明文字框,它短暂出现后就会慢慢变淡消失。与Toast具有相同作用的还有Crouton,这是一个外国人写的第三方库,跟Toast相同,一个界面一次只能出现一个Crouton。但与Toast淡出淡入的动画效果不同, 它一般是从布局的顶部滑入和滑出的,而且与灰不溜秋的Toast相比,它有多种色彩可供选择。Toast是“吐司”的英文,Cro

2017-06-13 11:07:20 3095

原创 Android自定义滑动Toast

之前做过的一个项目中要实现这样的效果:从屏幕的上端向下滑入一个带色的文字提示框,停留几秒之后再滑出屏幕之外。当时我并没有想到去用第三方库,自己摸索着做出来了。我的做法很简单,就是在界面的最上方放置一个TextView,然后给它设置滑出和滑入的动画。下图就是完成的效果:看起来还是可以的。写法并不高明,但当时确实满足了我的需求,也让我在解决问题的过程中得到了锻炼。现在就来介绍一下我的做法吧。1、创建项目

2017-06-12 15:16:12 1001

原创 Android仿淘宝头条竖直跑马灯式新闻标题及“分页思想”总结

在淘宝App的首页中间位置,有一块小小的地方在不知疲倦地循坏滚动着头条标题(见下图的红框区域),这样的设计无疑能够在有限的手机屏幕上展示更丰富的内容。而实现这一功能需要用到的控件就是我在上一篇文章中提到的ViewFlipper控件(详见“参考文章”)。在网上看到一篇博客是用自定义ViewFlipper实现的,但我却想起了我在实现饿了么导航栏时的思路:既然ViewFlipper的每个视图最多只有两个新

2017-06-01 15:01:36 1251

原创 Android之ViewFlipper的简单使用

大家都使用过ViewPager,但是ViewPager还有一个兄弟,那就是ViewFlipper。两者的名字非常相似,我们可以将ViewPager理解成“一页一页的视图”,ViewFlipper则是“快速翻转的视图”,但后者的使用率却远不及前者,不过这并不意味着ViewFlipper就弱了。现在我们就来拜访一下经常被冷落的ViewFlipper。1、创建工程及页面视图布局在Android Studi

2017-06-01 09:15:50 1195

原创 Android自定义滚动式时间选择器(在他人基础上修改)

尽管Android给我们提供了时间选择控件DatePicker和TimePicker(它们的使用方法可以参考我的这篇文章Android之日期时间选择控件DatePicker和TimePicker),但无奈我的项目主色调是土豪金和高级黑,原生的控件用在里面显得格格不入,特别是为了兼容低版本的系统之后显示的是2.x年代的风格,不但是简陋,简直是丑陋了。要解决这种问题,就只有走自定义控件这条道。但我目前还...

2017-05-25 10:31:45 19363 14

原创 Android之日期时间选择控件DatePicker和TimePicker

这个月根据需求在项目中做了一个时间选择器,虽然没有用到Android原生的时间选择控件,但我羞愧地发现自己竟然从来没有用过这方面控件!趁现在有时间,赶紧查缺补漏,写一篇博客吧。(注:为了便于区分,本文将选择年月日的控件称为日期选择控件,将选择时分的控件称为时间选择控件。)1、创建项目新建一个项目,MainActivity的布局如下:<LinearLayout xmlns:android="http:

2017-05-23 17:30:28 20262 11

原创 Android之AlertDialog的基础使用

坦白说,AlertDialog我在工作中用得并不多,因为AlertDialog的样式比较固定和呆板,为了和App的整体设计匹配,一般都是使用自定义的Dialog,只有在要求不高时用一下。但是作为Android的基础控件之一,掌握它是十分有必要。网上相关的资料已经多如牛毛,一搜就有好几页。但我还是决定写一篇自己的博客。1、创建AlertDialog首先,我们来了解一下AlertDialog的大体创建顺

2017-05-23 14:18:07 49488 2

原创 Android之自定义EditText光标和下划线颜色

最近在写些小Demo复习基础,在用到EditText的时候突然发现之前几乎没有注意到它的光标和下划线的颜色,于是花了不少时间,看了不少博客,现在就来总结和分享一下收获。1、第一印象:原生的EditText我们要在原生的EditText上修改,首先当然要认识一下它的本来面目。在Android Studio中新建一个工程,让MainActivity继承于AppCompatActivity(为什么要这样做

2017-05-22 13:38:15 28682 11

原创 TabLayout的简单运用和若干问题的解决

1、介绍和准备我们在使用手机App时不难会看到这样的页面上面是一组起导航作用的标签,点击标签就会切换到相应的页面;在不同的页面中滑动时,标签的样式(文字大小或者颜色)也会发生变化。这样你任何时候都能一眼看出自己停留在哪个页面。这个布局出镜率实在太高了,我甚至敢说每个学Android的人都写过这样的布局(下面就是知乎中的页面)。好了,废话少说,我们照例先来分析一下这个布局的组成。标签下面的页面比较容易

2017-05-02 17:14:04 3080

原创 仿饿了么首页导航栏(ViewPager)

1、需求分析在饿了么首页中我们能看到这样的布局(如下图)。红框内是一个可以左右滑动的页面,每一个页面类似于九宫格,都有可供点击图标。对于这样的布局,我在网上找了很久都没有找到相关的名称,所以我这里暂时叫它导航页吧。 最近公司的项目就要求我实现一个这样的布局,但是我们的图标并不是想饿了么这样是固定的,所以在饿了么的布局上还要加一个效果:在图标数目无法排满两行时,就只显示一行。比如说,我们每一页最多可

2017-03-27 10:00:01 6875 4

原创 EditText限制输入的字符数并弹出Toast提示字数已达上限

大家对EditText这个控件并不陌生,它是一个可供我们输入文本内容的输入框。前些日子需要实现这样一个需求:限制EditText中可以输入的最大字符数为6,达到6时,用户每按一次软键盘就弹出一个Toast提示用户,并且无法再输入内容。就像下图的效果:一开始我是直接在布局文件中在使用android:maxLength的属性将文本长度写死,然后再到代码中去监听,但是这样一来,监听也就失去了意义了,因为无

2017-02-24 17:16:08 5164 2

原创 Android Studio重写方法时参数显示异常的解决方法

今天打算写一个关于EditText的Demo,需要用到它的输入监听事件TextWatcher,重写里面的方法时,看到里面的参数就有点懵了: editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequ

2017-02-24 16:02:04 3369 3

原创 魅族手机测试时报Installation failed with message INSTALL_FAILED_USER_RESTRICTED错误的解决方法

新买的魅蓝note5手机连接上电脑后用Android Studio运行后报出了如下的错误:因为之前使用的魅蓝note用Android Studio部署工程时总会弹出一个对话框,要求同意安装时才会安装成功。所以一开始我以为是我忘记处理对话框了。可再次部署时,却发现并没有弹出任何对话框,而是直接就报错了。后来仔细查找一番,发现是魅族手机的设置问题。魅族手机有一个内置的手机管家软件,打开它,进入右下角的“

2017-01-12 14:36:03 11210 5

原创 Android中抛出android.app.Fragment$InstantiationException异常

在照着郭霖的《第一行代码》第二版写酷欧天气时,开头是在MainActivity中填充ChooseAreaFragment。书里的写法是在MainActivity的布局文件activity_main.xml中将Fragment作为一个控件放置进去:<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://sche

2016-12-24 16:05:37 1693

原创 百度地图路径规划时找不到DrivingRouteOverlay(overlayutil工具包)

在使用4.1.1版本的百度地图SDK进行需要用到DrivingRouteOverlay类,但是却显示找不到这个类。我明明都已经把所有的jar包和so文件都导进来了,定位功能也实现了,为什么到了路径规划就显示文件缺失呢?仔细查了一下官方的demo,发现demo中用到了一个overlayUtil的工具包,把它导入工程中,总算顺利解决了问题。后来仔细一看,其实百度地图SDK的libs是有提供这个工具包的,

2016-12-23 13:50:36 5383 2

原创 Android开发常用工具类(不定期进行更新)

写了几个项目之后,接触到了很多封装得不错的工具类(utils),脑海里渐渐有了抽取封装的意识,所以决定专门写一篇文章来总结一下。以后看到好的工具类时都会集中补充到这里。Activity跳转的工具类/** * Activity跳转的工具类 */public class ActivityUtils { //不用finish当前Activity时直接调用此方法 public sta

2016-11-24 16:24:34 906

原创 ScrollView嵌套ListView滑动冲突的简单解决方法

ScrollView和ListView这两个控件想必大家都不会陌生,但是这两者嵌套使用的时候就会出现麻烦。比如,我们如果想在ListView下面添加其他的布局或者控件,然后想让它们作为一个整体都可以滑动的话,最常想到的就是用一个ScrollView把它们包裹起来。想法似乎很美好,但是现实就有点残酷了。我们可以写一个小例子体验一下。首先创建一个Activity,在它的布局文件上放置一个ListView

2016-11-24 09:44:32 833

原创 RecyclerView的列表布局中match_parent失效的解决方法

今天在学习RecyclerView的列表布局中发现了一个很头疼的问题:我给列表中的item设置的布局的宽度明明是match_parent,可是呈现出来的效果却是wrap_content,也就是每个item的宽度都没有填充屏幕。在onCreateViewHolder方法中,我填充item的布局是这样写的: @Override public ViewHolder onCreateViewH

2016-11-15 21:38:11 6443 3

原创 Android开发之ActionBar无法显示logo

在写黑马的谷歌电子市场时发现了一个小问题,Activity继承了ActionBarActivity(已废弃,可以用AppCompatActivity代替),应用的主题是@style/Theme.AppCompat.Light,但是ActionBar左上角的自定义的logo就是没有出现,仔细看了看视频,也没有漏掉那些步骤。后来查了一通,才发现需要在代码中设置ActionBar: ActionBar a

2016-11-15 21:04:44 2637

原创 Android闪屏页动画不起作用的解决方法

有时候为了让闪屏页更加生动有趣,我们会为它添加动画效果,但是在实际开发我发现了一件奇怪的事情:在模拟器上,动画效果能够如期起作用,但是到了真机上就失灵。后来发现只需在清单文件中给闪屏页的Activity添加主题@android:style/Theme.NoTitleBar.Fullscreen。例如以下代码: <activity android:name=".activity.Spla

2016-10-01 23:21:44 1642

原创 Android应用闪屏页延迟跳转的三种写法

闪屏页也称之为欢迎页。在打开一个App时,我们第一眼看到的往往是一个闪屏页面,之所以叫闪屏页,是因为它出现之后会短暂地停留几秒钟再跳转到其他页面。闪屏页除了使用户体验更好外,还能给app留出初始化数据的时间。下面,是我总结的闪屏页的三种写法。准备工作打开Android Studio,新建一个projectMyStudy,新建一个SplashActivity并在清单文件中将其设置为启动Activity

2016-09-16 21:20:24 10194

原创 Android之禁止ViewPager滑动

当我们想在同一个Activity或者Fragment中展示多个页面时往往会用到ViewPager,通过滑动,我们可以很方便地在不同的页面中切换。但是在某些情况下我们可能并不需要通过滑动来切换ViewPager中的页面(比如为了避免跟页面内的某些触摸事件冲突),而是希望只点击下面或者上面的按钮来切换页面。像知乎那样:那么有什么方法可以实现不滑动ViewPager呢?其实很简单,只需要自定义一个不滑动的

2016-09-03 21:43:19 2009

见与不见,你说了算:Android之设置密码是否可见资源

博客文章《见与不见,你说了算:Android之设置密码是否可见》的代码文件和图片资源,博客地址:http://blog.csdn.net/Lindroid20/article/details/76384338

2017-07-30

Android使用CountDownTimer实现短信验证码倒计时Demo

使用了CountdownTimer实现短信验证码倒计时的效果,并解决了倒计时读数不准确的Bug。博客地址:http://blog.csdn.net/Lindroid20/article/details/73693102

2017-06-26

Android自定义滚动式时间选择器(在他人基础上修改)Demo

参考其它博主的自定义控件而改动的时间选择控件,博客地址:http://blog.csdn.net/lindroid20/article/details/72723061

2017-05-25

TabLayout的简单运用和若干问题的解决

博客http://blog.csdn.net/Lindroid20/article/details/70185954中的源码。

2017-05-02

仿饿了么首页导航栏(ViewPager)

使用ViewPager实现饿了么首页的导航栏效果,博客地址:http://blog.csdn.net/Lindroid20/article/details/66968410

2017-03-27

EditText限制输入的字符数并弹出Toast提示字数已达上限Demo

一个简单的小Demo,能够限制EditText的输入字符数并对用户进行提示。博客文章地址:http://blog.csdn.net/Lindroid20/article/details/56845775

2017-02-24

glide-3.7.0.jar

Glide的jar包。

2016-12-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除