
android开发基础
可乐猫哈
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android开发:使用android共享元素转场动画仿微信朋友圈图片预览功能
废话不多说,先上效果图,后面提供GitHub地址:大致的效果是:1.首先用recyclerView展示小图,当我点击图片后进入到预览界面,效果是我点击哪张图片就从哪张图片开始放大。2.当我进入预览界面后左右滑动图片,退出时的效果是当前position是几,我的页面就逐渐缩小回到ecyclerView中对应的position解析:外面的页面就是一个recyclerview,预览效果就是打开新的页面使用viewPager+PhotoView ————PhotoView地址重要的.原创 2020-09-29 11:04:29 · 1134 阅读 · 0 评论 -
Android开发:ViewFlipper实现文字广告轮播
背景:项目中首页需要有个新闻广告的文字轮播,如下图:本来在github上随便找了几个库,但是用着都不太好,因为来回切换页面的时候会有重影,体验不是很好,正好看到android原生ViewFlipper其实可以实现滚动的,因此记录一下。1.设置文字进入和退出动画进入动画:<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/andro原创 2020-09-22 13:01:50 · 738 阅读 · 0 评论 -
Android开发:使用Lambda表达式高效开发
简介:JDK1.8后java开始支持Lambda表达式,使用Lambda表达式我们就可以在Android中替换匿名类的写法。本来一个Button点击事件监听要写6行代码,我们1行就可以搞定。1.引入依赖implementation 'me.tatarka:gradle-retrolambda:3.6.0'2.修改我们JDK成1.8在Android studio中打开File>...原创 2020-01-14 11:54:29 · 537 阅读 · 1 评论 -
android开发:自定义view:圆形头像
package com.example.flycotablayoutapplication.widget;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import andr...原创 2019-12-31 15:52:05 · 205 阅读 · 1 评论 -
android开发:无序广播和有序广播区别
1.无序广播就是我们普通的广播,接收者接收无序广播没有优先级之分,并且无序广播不可以被拦截,内容不可以被修改。2.有序广播接收者接收有序广播有优先级之分,有序广播可以被接收者拦截、修改。例如广播接收者A和B,A的优先级高于B,则广播会先发送到A,A可以拦截广播停止传播,一旦拦截后面的接收者将不会收到广播,而且A可以修改广播的数据内容,再发送到接收者B。1.我们定义俩个广播接收者类,...原创 2019-12-25 18:02:12 · 3849 阅读 · 0 评论 -
android开发:BroadcastReceiver注意事项
开始之前咱们先来理解这句话:一个包含活跃组件的进程会被保护起来不被杀死。但是一个仅仅包含非活跃组件的进程,在系统内存不足时可能随时被系统杀死。android组件就包含了四大组件,组件还在执行它的生命周期时我们可以认为它是活跃的,当生命周期结束后可以认为它不是活跃的,需要注意的是生命周期结束后不代表对象会立马被销毁,只是说在生命周期结束后的随机某一时刻对象可能被销毁。就拿BroadcastRec...原创 2019-12-25 16:51:42 · 462 阅读 · 0 评论 -
android开发:app实现中英文切换
最近做了个小项目,领导要求添加可以切换中英文的功能,自己实现了这么一个效果:这里说一下我的实现思路:1.编写不同语言环境的string.xml文件2.编写一个工具类修改程序的配置信息3.销毁重建activity使配置生效4.重建activity后根据在主线程中存储的语言标识修改按钮图标(右上角的按钮)1.编写不同语言环境的string.xml文件android studio...原创 2019-12-24 18:54:18 · 5576 阅读 · 2 评论 -
android开发:view的坐标体系
Android中有两种坐标系,分别为Android坐标系和视图坐标系,首先我们先来看看Android坐标系。在Android中,将屏幕的左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,原点向下是Y轴正方向。Android坐标系:视图坐标系:View自身宽高:getHeight():获取View自身高度getWidth():获取View自身宽度View...原创 2019-12-16 09:35:13 · 318 阅读 · 0 评论 -
android开发:EasyPermissions实现android6.0动态权限申请
在android6.0中一些隐私的权限,例如读取手机联系人、获取位置等都属于危险权限,程序运行过程中必须动态申请得到用户的同意。EasyPermissions已经帮我们封装好动态申请权限。1.引入依赖implementation 'pub.devrel:easypermissions:1.0.1'2.申请权限//动态申请权限数组String[] perms = {Manifes...原创 2019-12-16 09:18:34 · 290 阅读 · 0 评论 -
android开发:activity上下文之外启动activity注意的地方
有过一点android经验的同学应该知道,在activity之外去启动一个activity一般会报这么一个异常。解决办法是需要我们设置:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);android.util.AndroidRuntimeException: Calling startActivity() from outside of an...原创 2019-12-14 16:16:49 · 594 阅读 · 0 评论 -
android开发:一个工具类搞定所有机型实现沉浸式状态栏
1.在build.gradle引入依赖 implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3'2.导入工具类package com.example.toolbarapplication;import android.annotation.TargetApi;import android....原创 2019-12-13 16:47:07 · 589 阅读 · 2 评论 -
Android开发: Jetpack之 Lifecycle(一)
1.为什么需要LifecycleLifecycle能够感应Activity和Fragment的生命周期。public class MainActivity extends AppCompatActivity { private MyPresenter myPresenter; @Override protected void onCreate(Bundle sav...原创 2019-12-07 17:00:05 · 170 阅读 · 0 评论 -
android开发:JetPack之LiveDateBus(一)
上一篇文章讲到LiveDate和ViewModel的使用,今天讲LiveDateBus如何使用android开发:JetPack之ViewModel(一)android开发:JetPack之LiveDate(一)简介:LiveDateBus是一款事件总线框架。LiveDateBus能感应activity、fragment的生命周期。当activity、fragment的生命周期结束时...原创 2019-12-07 16:38:06 · 413 阅读 · 0 评论 -
android开发:JetPack之LiveDate(一)
上一篇文章讲到ViewModel如何使用,这篇文章讲LiveDateandroid开发:JetPack之ViewModel(一)简介:LiveDate是可以被观察的数据持有者,LiveDate数据发生变化时候可以通知activity、fragment。当activity、fragment作为观察者去观察LiveData后,当观察者的生命周期处于STARTED或RESUMED状态时(即...原创 2019-12-07 16:05:05 · 496 阅读 · 0 评论 -
android开发:JetPack之ViewModel(一)
ViewModel简介ViewModel是以关联生命周期的方式来存储和管理UI相关的数据的类,当activity、fragment因某种原因导致重建时,数据仍然可以保存。(例如设备切换横屏会导致activity重建导致数据丢失,而使用ViewModel可以将数据保存)。日常我们使用MVP进行开发的时候通常都是在V层调用P层去执行网络请求,P层执行完成后通过调用V层的引用进行回调。因此我们还...原创 2019-12-07 14:31:53 · 610 阅读 · 0 评论 -
android开发:android代码不规范引起的内存泄漏与及解决办法
一、什么是内存泄漏内存泄漏是指当对象已经无用,但是还被其他对象引用着,GC的时候系统无法回收该对象。换成更通俗的话讲:生命周期长的对象保存着短生命周期对象的引用。二、android有哪些地方容易发生内存泄漏1.单例对象持有activity引用/** * @Author: david.lvfujiang * @Date: 2019/12/5 * @Describe: */pub...原创 2019-12-05 21:07:26 · 303 阅读 · 3 评论 -
android开发:eventBus引发的内存泄漏问题
讲解之前我们先讨论一个问题:activity非正常结束生命周期(发生异常或系统内存不足强制回收)会不会走onDestroy()方法?public class Main2Activity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { ...原创 2019-12-05 17:54:31 · 2524 阅读 · 4 评论 -
android开发:handler引发内存泄漏问题
日常我们使用Handler是这样子的: public class Main3Activity extends AppCompatActivity { Handler handler = new Handler() { @Override public void handleMessage(@NonNull Message msg) { ...原创 2019-12-04 21:13:33 · 200 阅读 · 0 评论 -
android开发:Android IPC机制(二):不同应用AIDL实现跨进程方法调用
上一篇文章中讲解了同个应用AIDL实现跨进程方法调用:android开发:Android IPC机制(一):同应用AIDL实现跨进程方法调用这篇文章主要讲解不同的应用之间怎么跨进程调用1.因为是不同应用,所以我们得创建一个服务器的项目和一客户端项目需要非常注意的是:服务器和客户端的aidl文件和实体类它们的目录结构和包名都必须一样,你可以对比上图。2.服务器创建Servic...原创 2019-11-28 16:18:29 · 263 阅读 · 0 评论 -
android开发:Android IPC机制(一):同应用AIDL实现跨进程方法调用
我们都知道进程是独立运行的,进程与进程之间数据是不能随便共享的,但是难免会有些需求需要开启多进程,同时又需要进程与进程之间传递某些数据。android中使用AIDL可以实现跨进程调用。本章主要讲同个应用中,不同进程,使用AIDL实现调用:假设我们现在在应用中启动一个新的进程来运行一个service,那service返回数据给activity则就需要使用AIDL了。1.首先创建实体类,...原创 2019-11-28 15:53:41 · 574 阅读 · 0 评论 -
android开发:网络实时监听,适配android7.0
android实时监测到网络有俩种方式一、利用系统广播监听网络状态1.添加网络权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET"&g...原创 2019-11-05 19:20:21 · 803 阅读 · 0 评论 -
android开发:listView优化
public class Main2Activity extends AppCompatActivity {String[] arry = {"张三","里斯"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);...原创 2019-10-29 20:06:46 · 181 阅读 · 0 评论 -
android开发:IntentService和前台Service
一、Service 是长期运行在后台的应用程序组件。默认情况下是和主线程绑定的,所以当我们在onStartCommand方法进行一些耗时操作时容易发生异常,所以android提供了IntentService给我们,它默认会开启一个新的线程执行我们的任务,当任务执行完毕后会主动关闭service.实现方式:1.继承IntentService2.重写它的onHandleIntent方法...原创 2019-10-21 19:33:41 · 583 阅读 · 0 评论 -
android开发:android实现双击才执行任务功能
实现很简单,在点击事件执行的时候用一个值来记录点击的时间,每次点击都判断时间间隔,如果时间间隔大于我们设定的值只要记录当前点击的时间即可,如果小于我们设定的时间则执行我们的任务 private static final long TIME_INTERVAL = 1000L; long downTime = 0; @Override public boolean onT...原创 2019-10-16 15:20:52 · 532 阅读 · 0 评论 -
android开发:使用Gson解析复杂的json数据
1.返回的json字符串转成javaBean WeatherBean bean = new Gson().fromJson(weatherMessage, WeatherBean.class);2.获取json字符串中的某个参数 JsonObject jsonObject = new JsonParser().parse(msg).getAsJsonObject(); St...原创 2019-10-16 10:00:56 · 911 阅读 · 0 评论 -
android开发:AsyncTask的基础用法
利用AsyncTask我们可以在子线程中进行一些耗时操作,然后在通知主线程更新UI,我们以下载为例:/** * @Author: david.lvfujiang * @Date: 2019/10/15 * @Describe: */public class DownloadTask extends AsyncTask<String, Integer, Boolean&g...原创 2019-10-16 09:29:50 · 253 阅读 · 0 评论 -
git:git常用指令
1.git branch 查看本地所在的分支2.git branch -a 查看所有分支3.gii branch -vv 查看当前本地分支和远程分支的关联关系4.git branch -u origin/master 本地分支跟远程分支关联5.git reflog 查看所有commit,包括已经删除的commit 执行 git res...原创 2019-10-15 17:03:50 · 180 阅读 · 0 评论 -
android开发:融云怎么监听未读消息
场景:比如A和B是好友,A给B发送消息,APP桌面图标右上角会有未读消息数量显示,超过99就显示99+代码实现:RongIM.getInstance().addUnReadMessageCountChangedObserver(observer, Conversation.ConversationType.PRIVATE); /** * 未读消息监听回调 ...原创 2019-10-14 20:50:55 · 1037 阅读 · 0 评论 -
android开发:融云怎么清除指定会话列表、所有会话列表
场景:比如说A和B是好友,A删除B后应该删除聊天item,代码如下/** * 删除聊天item的方法 * 设备解绑的时候调用,删除聊天列表的item * * @param userPhoneNumber 用户手机号码 */ @Override public void removeRongIMMessage(String use...原创 2019-10-14 20:42:27 · 790 阅读 · 0 评论 -
android开发:融云怎么获取用户名、用户头像
首先融云服务器本身只维护用户的 token 以及 userId。用户信息融云是不负责维护,而是由开发者自己来维护。为了开发者方便快捷开发。 我们提供了 IMKit 的依赖 Module 工程。IMKit 是基于 IMLib 之上进行开发的,是 IM 界面逻辑相关实现的半成品。用户可在 IMKit 基础之上进行快速定制开发。我们在 IMKit 中实现了会话列表以及会话界面,及界面用户信息的加...原创 2019-10-14 17:47:13 · 1122 阅读 · 0 评论 -
android开发:沉浸式状态栏和全屏模式下输入框和软键盘冲突解决方案
最近在做一个聊天界面 ,为了让界面好看点就把界面设成了沉浸式状态栏,然后发现沉浸式状态栏下点击输入框软键盘会把输入框给遮住,打字的时候根本不知道自己打了什么,用户体验很差。百度了一下说在AndroidManifest.xml的Activity中添加android:windowSoftInputMode="stateHidden|adjustPan"得到的效果是:打开软键盘的时候会把...原创 2019-10-11 21:22:04 · 2244 阅读 · 1 评论 -
android开发:gradle自定义BuildConfig.DEBUG实现在debug模式下输出Log日志,release环境下不输出Log
因为做android开发,我们程序员都需要经常在程序里面去打印日志。但是一旦我们项目做完上线之后这些日志就不在需要打印了,因为它可能影响性能之类的。你可以在上线之后删掉,但这样做有缺点。1.你得一行一行的删,不知道要删到猴年马月,头发又会少了一撮 2.如果项目上线了发现有bug需要返工,然后你发现日志都被你删完了,然后你就原地爆炸。所以做android开发我们可以在build.gradle...原创 2019-08-29 20:12:19 · 3140 阅读 · 1 评论 -
android开发:沉浸式状态栏
平时我们运用到的所有App都会用到沉浸式状态栏,它的功能是将系统状态栏透明化,并允许我们的应用从屏幕下方开始布局如下图:我们的应用是从屏幕下方就开始布局,状态栏的颜色跟我们的标题栏是一致的。如果不使用沉浸式状态栏的话,默认状态栏一般都是灰色或者黑色,并且应用是从状态栏下方开始布局,这样子就会显得整个应用跟状态栏格格不入,影响应用体验。如何实现沉浸式状态栏:1.设置我们的应用主题为N...原创 2019-08-19 16:12:37 · 234 阅读 · 0 评论 -
android开发:危险权限动态申请
最近公司集成云之讯的时候android应用需要获取系统拨打电话、摄像头等权限,在AndroidManifest开启了权限后运行程序的时候直接报错了:说没有获取CAMERA权限。原因是:Android 6.0开始,Google将权限分为两类,一类是Normal Permission(普通权限), 这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangero...原创 2019-08-28 17:47:23 · 855 阅读 · 0 评论 -
android开发实现头像上传功能
刚进公司领导要求做个app头像上传功能,要求从相册或者相机拍照上传头像。网上参考了一些demo,整理了一下。效果如图: 流程其实挺简单:对按钮进行监听,点击后弹出AlertDialog,对AlertDialog的中的三个View进行分别监听,点击相册则动态获取权限然后startActivityForResult启动相册,并重写onActivityResult方法用于回调接收...原创 2019-08-19 16:56:00 · 12833 阅读 · 9 评论 -
安卓开发:Android开发技术学习之popupwindow的弹窗实现
popupwindow在我们的一些大型手机app上经常出现,例如微信、QQ等。它和Dialog相似,但是位置摆放好像更加灵活。俩者区别详细咨询百度。popupwindow效果如下图,点击加号弹出一个popupwindow显示于屏幕最上方1.先创建mainActivity的布局<?xml version="1.0" encoding="utf-8"?><Relati...原创 2019-08-19 15:45:13 · 910 阅读 · 0 评论 -
android适配器:SimpleAdapter
1.首先写一个Adapter项布局文件,主要用来设置listView每一项的布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an...原创 2019-04-02 10:44:58 · 278 阅读 · 0 评论 -
android适配器:ArrayAdapter
String data[]={"上海","北京","深圳","桂林","南宁"};//数据源ListView listView=(ListView)this.findViewById(R.id.listView);//绑定ListView控件//创建适配器ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String&g...原创 2019-04-02 10:53:29 · 599 阅读 · 0 评论 -
android适配器:BaseAdapter
BaseAdapter是个抽象类,需要我们继承编写子类实现自定义ListView适配器1.自定义的adapter类class MyAdapter extends BaseAdapter{ View MyView; //数据源 int img[]={R.drawable.f13,R.drawable.f14}; String str[]={"图片1","图...原创 2019-04-02 12:08:50 · 425 阅读 · 0 评论 -
android四大组件之一:广播
Android广播分为两个角色:广播发送者、广播接收器练习:发送者发送消息给广播接收器,再由接收器发送消息给用户1.发送者package com.example.administrator.myapplication;import android.content.Intent;import android.content.IntentFilter;import a...原创 2019-04-08 13:40:24 · 338 阅读 · 0 评论