Android开发
程序员磊哥
这个作者很懒,什么都没留下…
展开
-
Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题
我的上一篇文章:设置DialogFragment全屏显示 可以设置对话框的内容全屏显示,但是存在在某些机型上顶部的View被状态栏遮住的问题。经过测试,发现了一种解决办法,在DialogFragment的onCreateView()中添加一个布局监听器:@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup co...原创 2018-10-29 11:56:52 · 3557 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(二)介绍
介绍发布时间ConstraintLayout是在2016的Google I/O大会上发布的,经过这么长时间的更新,现在已经非常稳定。支持Android 2.3(API 9)+目前的Android设置几乎没有低于Android4.4(Api 19)的,所以ConstraintLayout可以支持所有的设备。单独的依赖包ConstraintLayout并不是Android SDK的一部分,...原创 2018-10-31 15:05:40 · 236 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(一)传统布局的问题
在传统的Android开发中,页面布局占用了我们很多的开发时间,而且面对复杂页面的时候,传统的一些布局会显得非常复杂,每种布局都有特定的应用场景,我们通常需要各种布局结合起来使用来实现复杂的页面。随着ConstraintLayout的推出,这种现象有了很大的改善,而且它可以实现很多传统布局难以实现的功能。本系列我们就一起来学习ConstraintLayout的使用,来大幅提高我们的生产力。传统...原创 2018-10-30 15:17:07 · 595 阅读 · 2 评论 -
Android开发 - 掌握ConstraintLayout(三)编辑器
从本篇博客开始我们开始介绍如何使用ConstraintLayout。既然ConstraintLayout叫约束布局,首先我们先介绍什么叫约束(Constraints):约束(Constraints)一个约束表示View之间的"布局约束"关系,以及约束的位置,类似RelativeLayout的"相对"概念。编辑器介绍在工程中我们新建一个布局activity_main.xml,整个界面如下:...原创 2018-11-01 14:13:27 · 289 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(五)偏差(Bias)
比如实现这样一个场景:“在屏幕宽度的1/4的地方放置一个View”使用传统布局时,实现按照屏幕的宽度(高度),或者相对两个View之间距离的一个比例来进行布局,就显得非常麻烦,但是当使用ConstraintLayout时,就可以很简单地实现这样的需求。BiasBias就是为了实现这种需求而设计出来的。我们来举例说明,看下图:当前我们是将这个按钮相对屏幕宽度居中显示。那么我们如何...原创 2018-11-06 17:44:58 · 673 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(六)链条(Chains)
本文我们介绍链条(Chains),使用它可以将多个View连接起来,互相约束。可以创建横向的链条,也可以创建纵向的链条,我们以横向的链条举例:我们先创建三个按钮:我们选中三个按钮后在上面点右键创建链条:创建后我们发现这三个View平均分布地排列了:最简单的使用是平均分布,当然也可以不平均分布,具体看约束的具体设置,比如将第一个Button的marginEnd设置成10后...原创 2018-11-07 14:57:00 · 2853 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(四)创建基本约束
上一篇我们介绍了编辑器的基本使用,本文我们介绍创建基本的约束。"约束"表示View之间的位置关系。当我们在ConstraintLayout布局中创建View时,如果我们没有添加任何约束,虽然在设计视图我们可以拖动它们到任意位置,但是运行后都会在左上角的原点位置,同时代码中也会给出警告:所以我们必须确保我们的View都被添加了适当的约束。我们常用的约束通常有两种,一种是相对父View的约束,...原创 2018-11-05 18:15:58 · 216 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(七)辅助线(Guideline)
了解过UI设计的同学都知道,在设计的时候,我们经常在界面上拖进一些辅助线来帮我们对齐UI元素,或者方便我们统一的页边距。在ConstraintLayout的编辑器中,同样也支持这样的功能,我们可以创建一些横向的或者纵向的Guideline,在布局界面的时候可以充分利用这些辅助线,对齐我们的View,避免重复写一些marginXXX。创建Guideline打开编辑器,选择Helpers -&g...原创 2018-11-08 14:14:32 · 5728 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(八)障碍线(Barrier)
本文我们来介绍障碍线(Barrier)的使用,平常在开发中用的相对要少一些,但是在需要时会非常方便。它的作用是将多个元素放到这个障碍线里面使时,其中的任何元素的大小或位置变化时都会使它的位置进行改变。可以理解成一面墙,"墙"里面任何元素的位置或大小改变时都会导致它的改变,从而保证所有的元素都在"墙"里面。下面我们来举例进行说明,会更加直观。首先,我们先创建两个元素:接下来,我们...原创 2018-11-29 14:02:51 · 1063 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(十)按比例设置视图大小
有时候在布局界面的时候,UI要求某个View或者某张图片按比例显示,以适应不同的屏幕分辨率。通常我们时通过自定义View或者引入第三方的库来解决。现在我们既然已经使用了ConstraintLayout,它本身就支持这样的按比例设置View大小的功能。下面我们来介绍如何使用:首先我们在布局中添加一个View:此时,没有添加任何约束,显示的比例就是原始图片的比例。添加水平方向的约束:...原创 2018-12-04 15:29:27 · 3228 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(十一)复杂动画!如此简单!
介绍本系列我们已经介绍了ConstraintLayout的基本用法。学习到这里,相信你已经熟悉ConstraintLayout的基本使用了,如果你对它的用法还不了解,建议您先阅读我之前的文章。使用ConstraintLayout创建动画的基本思想是我们创建两个不同的布局,每个布局有其不同的约束,从而我们使用其动画框架来进行两种约束之间的切换。传统动画以往在我们创建简单动画时,通常我们会使用...原创 2018-12-05 10:12:00 · 298 阅读 · 0 评论 -
Android开发 - 掌握ConstraintLayout(九)分组(Group)
使用ConstraintLayout后我们的布局是没有层级关系的,各个View之间都是平级关系,但是如果根据某个业务条件来控制多个View的显示与否,我们需要分别对每个View进行控制,需要调用多次setVisibility()。这样就显得非常不方便。本文所介绍的Group就是解决这个问题的。Group就是一个分组,可以关联多个View,从而只需要对这个分组进行控制就可以实现这样的场景。我们...原创 2018-12-03 13:47:43 · 756 阅读 · 0 评论 -
Flutter介绍 - Flutter,H5,React Native之间的对比
Flutter介绍Flutter是Google推出的开源移动应用开发框架。开发者可以通过开发一套代码同时运行在iOS和Android平台。它使用Dart语言进行开发,并且最终编译成各个平台的Native代码,这样既保证了开发效率,也保证了各个平台的运行效率。其相当于从头到尾重写了一套UI框架,不依赖具体平台的组件。其所有的组件都是"Widget"。渲染引擎则依靠高效渲染库Skia实现。下面我...原创 2019-03-20 18:35:29 · 1096 阅读 · 0 评论 -
Android开发 - 设置DialogFragment全屏显示
默认的DialogFragment并不是全屏,但有些需求需要我们将对话框设置为全屏(内容全屏),Android并没有提供直接的API,通过其它不同的方法设置全屏在不同的机型上总有一些诡异的问题,经过测试,下面的方法可以实现各个机型的全屏。测试 SDK Version = 28覆写Fragment的onStart()方法:@Overridepublic void onStart() { ...原创 2018-10-22 18:56:06 · 1037 阅读 · 0 评论 -
Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)
在我们的APP开发中,通常需要获取到设备的唯一标识。在Android6.0之前,有很多方法我们可以方便获取到硬件的唯一标识,但是在Android6.0之后,Android系统大幅限制了我们获取设备的硬件信息。Android6.0之前的方法(已过时)DEVICE_ID通getSystemService(Context.TELEPHONY_SERVICE).getDeviceId()获取...原创 2018-10-17 16:39:59 · 1407 阅读 · 0 评论 -
Android开发教程 - 使用Data Binding(一) 介绍
引言 Data Binding(数据绑定)发布于2015年的Google I/O大会,旨在减少Android开发中的大量模板代码(比如findViewById()),增加代码及逻辑清晰度,提高开发效率和维护效率。什么是Data BindingData Binding,即数据绑定,是Android团队实现MVVM架构的一种方法,使得数据(对象)可以直接绑定到布局的xml中,数据...原创 2018-09-04 14:03:19 · 219 阅读 · 0 评论 -
Android开发教程 - 使用Data Binding(二)集成与配置
安装依赖库,配置工程Data Binding安装和配置都非常简单,仅需简单的两步即可完成。更新SDK打开SDK管理工具,下载最新的Android Support库。 配置工程的Gradleandroid { … dataBinding { enabled = true }}加入完成后,然后点击Sync Now,完成后就...原创 2018-09-04 19:26:22 · 225 阅读 · 0 评论 -
Android开发教程 - 使用Data Binding(七)使用BindingAdapter简化图片加载
什么是BindingAdapterBindingAdapter用来设置布局中View的自定义属性,当使用该属性时,可以自定义其行为。下面是一个简单的例子:@BindingAdapter("android:bufferType")public static void setBufferType(TextView view, TextView.BufferType bufferTyp...原创 2018-09-11 13:48:08 · 1424 阅读 · 2 评论 -
Android开发教程 - 使用Data Binding(八)使用自定义Interface
为什么要使用自定义Interface我们平常在Android的开发中,比如如果要设置一个View的点击事件,通常通过view.setOnClickListener()来实现的,这种方式略显繁琐,而且要通过findViewById()来获取到此View的引用。使用了Data Binding技术以后,我们无需这样做,可以直接通过在xml布局文件中设置一个Interface的实现来直接调用某个方法...原创 2018-09-11 13:49:06 · 451 阅读 · 0 评论 -
Android开发教程 - 使用Data Binding(三)在Activity中的使用
修改activity布局如果使Activity支持Data Binding,在布局的最外层加入”<layout>”标签即可,由于是加在最外层,所以即使重构现有工程,所做的修改也非常简单,并不会影响现有的布局结构。以下以MainActivity进行举例。修改前activty_main.xml的布局:<?xml version="1.0" encoding="ut...原创 2018-09-05 14:04:09 · 983 阅读 · 0 评论 -
Android开发教程 - 使用Data Binding(四)在Fragment中的使用
修改fragment的布局同上一篇:在Activity中的使用中一样,在Fragment中使用Data Binding同样需要修改布局,修改方式也跟Activity一样,在最外层加上\标签:<?xml version="1.0" encoding="utf-8"?><layout xmlns:andro原创 2018-09-06 14:45:40 · 7288 阅读 · 0 评论 -
Android开发教程 - 使用Data Binding Android Studio不能正常生成相关类/方法的解决办法
有时候新建布局文件时或者定义布局中的变量时,不能即时生成相关Binding类或方法(其实是不能正确索引),也许是IDE支持的一些BUG,不过Android Studio对Data Binding的支持问题也仅限于这些,并且可以比较简单地解决这些问题。方法一(经常不起作用):菜单 -> Build -> Clean Project -> Rebuild Pro...原创 2018-09-12 14:07:15 · 1175 阅读 · 0 评论 -
Android开发教程 - 使用Data Binding(五)数据绑定
前面我们讲到了Data Binding在Activity中的使用和在Fragment中的使用,在两者的布局文件中,都可以绑定数据(对象),本篇文章我们就来介绍数据的绑定。<data>标签在这个标签中,我们通常用来做下面的事情: - 定义所绑定的数据的名称(变量名)及对应类型 - 引入页面所需的类示例如下:<data> <im...原创 2018-09-10 14:14:27 · 332 阅读 · 0 评论 -
Android开发教程 - 使用Data Binding(六)RecyclerView Adapter中的使用
前面我们讲到了Data Binding在Activity中的使用和在Fragment中的使用,除此之外,Data Binding也可以使用在RecyclerView/AdapterView的Adapter中,本文以RecyclerView为例。获取Binding对象按照通常的做法,我们在Adapter中会定义一个ViewHolder,在此ViewHolder中取得一些布局Vie...原创 2018-09-10 14:15:14 · 1751 阅读 · 0 评论 -
Android开发 - ImageView加载Base64编码的图片
在我们开发应用的过程中,并不是所有情况下都请求图片的URL或者加载本地图片,有时我们需要加载Base64编码的图片。这种情况出现在服务端需要动态生成的图片,比如:二维码图形验证码…这些应用场景有个共同点就是,这些图片都是由服务器动态生成,并不需要生成后保存成文件再返回给客户端。Android中ImageView加载Base64图片其实非常简单,并不需要引入第三方库,方法如下:imp...原创 2018-10-15 14:00:04 · 9541 阅读 · 2 评论 -
Android开发 - 更"聪明"的申请权限方式
在Android6.0以后,很多权限需要动态申请,只有在用户点同意后,我们才能使用对应API,因此,正确申请权限就显得很重要。常用方式通常我们使用这种方式来判断权限状态:private static boolean isGranted(final String permission) { return Build.VERSION.SDK_INT < Build.VERSION_...原创 2018-10-18 15:25:46 · 237 阅读 · 0 评论 -
Android开发 - Retrofit 2 使用自签名的HTTPS证书进行API请求
为了确保数据传输的安全,现在越来越多的应用使用Https的方式来进行数据传输,使用https有很多有点,比如:HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。但是即使使用HTTPS有很多有点...原创 2018-10-19 15:47:28 · 640 阅读 · 0 评论 -
Android开发 - 获取系统输入法高度的正确姿势
问题与解决在Android应用的开发中,有一些需求需要我们获取到输入法的高度,但是官方的API并没有提供类似的方法,所以我们需要自己来实现。查阅了网上很多资料,试过以后都不理想。比如有的方法通过监听布局的变化来计算输入法的高度,这种方式在Activity的配置中配置为"android:windowSoftInputMode=“adjustResize”"时没有问题,可以正确获取输入法的高度,...原创 2018-10-17 13:57:28 · 2097 阅读 · 0 评论 -
安装与配置Flutter开发环境
这篇博客我们介绍了Flutter,并且对比了H5,React Native,Flutter。由于Flutter是跨平台的开发框架,开发一次可以同时运行在Android和iOS上面,所以我们开发时最好使用Mac系统,这样我们可以同时测试两个平台的运行效果。本文我们就来介绍在Mac系统下安装与配置Flutter开发环境,并且运行我们的第一个Flutter应用!为了Flutter的安装配置顺利,请...原创 2019-03-22 07:38:29 · 296 阅读 · 0 评论