![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 58
Simple_Peng
在代码的海洋遨游,寻找属于自己的那份快乐!
展开
-
自定义全局异常捕获-SpiderMan
如何自定义一个全局异常捕获器-SpiderMan一图胜前言上图中,我们模拟了NullPointerException的发生,系统捕获了该异常,并用一个界面展示了出来。如何实现想要实现全局异常的捕获我们需要了解Thead中的一个内部接口UncaughtExceptionHandler,该接口在JDK1.5中被添加。所有我们需要自定义一个类去实现该接口,并且设置给Thread的Defaul...原创 2019-01-09 14:56:10 · 1023 阅读 · 0 评论 -
Android架构组件Room的使用
Android架构组件Room的使用Room其实就是一个orm,抽象了SQLite的使用,但是它作为Android的亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错的。Room有3个主要组件Database :数据库Entity : 代表数据库一个表结构Dao : 包含访问数据库的方法简单使用添加Google Maven仓库allprojects {原创 2017-12-26 18:42:48 · 13118 阅读 · 1 评论 -
kotlin使用Parcelize注解简化Parcelable的书写
kotlin使用Parcelize注解简化Parcelable的书写Parcelize注解kotlin在1.1.4版本增加了对parcelable的支持Android扩展插件现在包含一个实现了Parcelable的自动生成器。在主构造函数中声明序列化的属性并添加一个@Parcelize注解,生成器就会自动创建writeToParcel()/ createFromParcel()方法需求环境Kotli原创 2017-12-05 11:58:27 · 7271 阅读 · 0 评论 -
在自定义view中画 .9 的Bitmap
//加载点9位图 NinePatchDrawable npd = (NinePatchDrawable) getResources() .getDrawable(R.drawable.xxxx); //设置需要的范围边界 Rect rect = new Rect(left, top,top, bottom); npd.se原创 2017-01-10 16:44:52 · 754 阅读 · 0 评论 -
Android 发布Library到Jcenter
前言习惯了 compile ‘com.android.support:appcompat-v7:24.2.1’ 这种依赖第三方库的方式,简直不要太爽。那为什么这么一句话就可以引入一个第三方库呢?这全是Jcenter的功劳,Jcenter不知道是什么?那真的可以自己Google一下了。 现在我们自己尝试一下把自己的Library上传到Jcenter,这里我用自己以前开源的项目Updater当例子来试原创 2016-12-30 15:23:04 · 443 阅读 · 0 评论 -
AndroidStudio Jni 开发初识
NDK 是什么?NDK是一系列工具的集合,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk为什么使用NDK代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。开始使用下载ndk环原创 2017-01-13 16:55:48 · 288 阅读 · 0 评论 -
Android Studio 布局中引用自定义属性不提示的问题
Eclipse里面自定义属性的命名空间的声明一般都是xmlns:app="http://schemas.android.com/apk/res/com.xxx(包名)而Android Studio里面的命名空间声明则是xmlns:app="http://schemas.android.com/apk/res-auto但是在布局中使用自定义属性时发现并不会自动提示声明好的属性,一直困惑了很久才发现自定原创 2016-10-12 17:34:33 · 7941 阅读 · 7 评论 -
JavePoet 初体验
前言javapoet是square公司旗下的一款开源项目,旨在用java api 生成.java源代码文件,英语好的同学可以直接移步该项目的gayhub地址。 https://github.com/square/javapoet举个例子假如要生成类似这样的一个文件package com.simple;import java.lang.String;impor原创 2016-11-03 10:47:45 · 430 阅读 · 0 评论 -
使用Android Support Annotations优化你的代码
Android Support Annotations提供的注解允许你想lint检查那样提供一些提示在代码审查上,可以帮助你解决一些难以发现的代码问题。添加依赖选择File > Project Structure点击Dependencies标签点击“+”按钮然后选择Library dependency那项在弹出的选择框选择support-annotations然后点击o原创 2016-08-16 11:54:19 · 2897 阅读 · 0 评论 -
AndroidStudio对比Eclipse快捷键
debug/run 操作 studio eclipse 计算变量值 alt+F8 ctrl+shift+I 跳到下一步 F8 F6 跳到下一个断点 shift+F8 F8 进入到代码 F7 F5 停止运行 Ctrl+F2 debug运行app shift+F9 F11 运行app shift+F10 ct原创 2016-08-12 15:13:21 · 520 阅读 · 0 评论 -
很简单就实现垂直滑动的ViewPager
VerticalViewPager/** * 垂直滑动的ViewPager */public class VerticalViewPager extends ViewPager { public VerticalViewPager(Context context) { this(context, null); } public VerticalViewPa原创 2016-08-11 17:33:24 · 6164 阅读 · 1 评论 -
自定义Drawable 实现波纹扩散效果
自定义drawablepublic class RippleDrawable extends Drawable implements Animatable { //需要的画笔 private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); //画笔的颜色 private int bg_color = Color.BLU原创 2016-08-10 17:16:43 · 1420 阅读 · 0 评论 -
Vysor 破解
分析源代码可知软件在uglify-list.js文件内通过_il变量判断是否注册成功, 于是配置该变量为true,打开 uglify.js文件, 搜索 _il变量, 将 _il:Te.a() 替换为 _il:true, 然后重启chrome和vysor. 发现Vysory已经变为专业版了。uglify.js文件在chrome的Extensions文件夹下,可以用开发者模式先找到扩展的id。然后到这个原创 2017-03-13 15:44:12 · 4484 阅读 · 0 评论 -
Android Studio找不到navigation标签的解决办法
最近在学习JetPack-Navigation组件的使用,但是在AS中能新建navigation的文件夹却不能新建navigation的xml文件,于是上Stack Overflow找了一下解决办法还真找到了。解决办法找到Settings(Mac是Preferences)中的Experimental选项,选中Enable Navigation Editor选项,然后重启。...原创 2018-11-20 11:48:28 · 2803 阅读 · 0 评论 -
Android使用cmake+ndk输出原生Log
Android使用cmake+ndk输出原生Log我们可以在c/cpp代码中用print函数输出log信息,但是这样在logcat并不会显示,好在Android已经给我提供了相应的方法解决这个问题:使用log.h头文件开始创建一个新的Android Studio的工程项目勾选Include C++ support选项然后就是一路next直到创建项目成功项目结构生...原创 2018-08-15 11:52:47 · 5584 阅读 · 0 评论 -
自定义SnackBar
前言我浏览material.io网站时,从所谓的“Material Design 2”中找到一些新的组件,并发现Snackbar已经改变了,它不再占用整个屏幕长度,并且周围会有一个间距。但我并没有从Support Library的alpha版本中找到它,所以我决定自己实现一下。1、创建Drawable文件<shape xmlns:android="http://s...原创 2018-07-10 16:52:07 · 2209 阅读 · 0 评论 -
Android架构组件—ViewModel
探索Android架构模式中ViewModel前言我们中的大多数人都遇到过旋转手机并且应用程序崩溃或UI失去状态的问题。解决它最简单的办法就是配置Activity为potrait模式,但这是一个很糟糕的做法。幸运的是,Android团队在2017年Google I / O期间发布了ViewModel。该ViewModel类被设计用来保存与UI相关的数据并且它是可以感知生命周...原创 2018-06-28 11:59:00 · 2851 阅读 · 1 评论 -
Android架构组件—LiveData
Android架构组件—LiveData前言LiveData 是一个可以保存数据和观察数据变化的组件。他是被设计用来在ViewModel中保存数据,但是同样也可以在应用的其他地方使用。LiveData使用观察者模式监听数据的改变。这与RxJava的Observable非常类似,但是LiveData不止于此,LiveData是具有生命周期感知能力的。简单的说,LiveData...原创 2018-06-28 11:58:30 · 2130 阅读 · 1 评论 -
Android架构组件(Architecture Components)介绍
Android架构组件(Architecture Components)介绍为什么需要架构组件 之前有多少人是把所有代码都写在 Activity里面?几乎每个人都干过一次,对吧!Android 框架层面上允许自由的做到上面这点,但是后来我们意识到了这么做会带来的问题,这使得我们的代码变得臃肿不堪,难以维护。所以才出现了像mvp,mvvm这样不同的架构模式,这使得我们可以编写更...原创 2018-06-28 11:58:05 · 1369 阅读 · 0 评论 -
使用Gradle和Kotlin组织Android的资源文件
使用Gradle和Kotlin组织Android的资源文件前言如果您已经开发了3年或4年的App应用程序,那么您可能会注意到资源文件夹是如何变得混乱不堪的。尽管大多数开发人员会专注于组织他们的Java / Kotlin文件(通过功能或屏幕),但资源文件通常无人看管。尝试减少混乱的一个尝试是使用文件的命名约定。例如,在一些使用的布局文件中:activity_*.xmlfragment_*.xml原创 2018-04-20 16:33:55 · 1267 阅读 · 0 评论 -
Android Material Buttons
前言Google Material Design 的文档中提到:“当按钮被触摸时应该给与用户相应的反馈”,现在有了compat支持库实现这种效果将会非常简单。添加资源将最新的appcompat库添加到您的项目中dependencies { //replace X.X.X with the latest version compile 'com.android.support:appc原创 2018-04-19 20:01:35 · 1878 阅读 · 0 评论 -
约束布局(ConstraintLayout)1.1.0的新特性
约束布局(ConstraintLayout)1.1.0的新特性约束布局无疑是最适合构建响应式用户界面的布局-根据屏幕大小自动调整的布局。很高兴ConstraintLayout发布了1.1.0版本,1.1.0的这些新特性让ConstraintLayout能够做出更好的工作,并且不丢失原有的特性。圆形定位(Circular Positioning)当一个View需要根据另一个View进行定位时,该角度和原创 2018-04-19 12:56:29 · 1806 阅读 · 3 评论 -
优化嵌套的RecyclerView
优化嵌套的RecyclerViewRecyclerView是ListView的更高级版本,它重用相同的视图以防止额外创建视图以提供平滑的滚动体验。RecyclerView通过保持视图池来实现这一点,该视图池包含不再可见并且可以回收的视图。有时我们需要嵌套RecyclerView来创建一些布局。考虑在垂直方向RecyclerView内部有水平RecyclerView的情况。在上图可以...原创 2018-04-10 10:39:51 · 3871 阅读 · 3 评论 -
从Java切换到Kotlin:5个令Android开发者兴奋的特征
1.命名参数每个Java开发者的噩梦:大量的参数(例如在Cursors或Android中创建SQLite查询),它们的名字和方法定义中的顺序。如果没有文档或IDE帮助,您无法在Java中正确编写它@Overridepublic Loader<Cursor> onCreateLoader(int i, Bundle bundle) { return new Curs...原创 2018-04-10 10:36:08 · 488 阅读 · 0 评论 -
ViewDragHelper简解
ViewDragHelper简解概述ViewDragHelper是一个用于编写自定义视图组的实用程序类。它提供了许多有用的操作和状态跟踪,允许用户在其父视图组中拖动和重新定位视图。(ps:来自官方注释)简单入门创建ViewDragHelper的实例回调相关触摸的方法public class DragLayout extends LinearLayout { private ViewDra原创 2018-03-01 21:21:36 · 186 阅读 · 0 评论 -
ViewPageerTransform深入理解,给viewpager切换加动画
ViewPagerTransforms的深入理解每当viewpager上一个可见或依附的页面发生了滚动事件就会调用PageTransformer,这让应用可以使用自定义transformation让viewpager某一个页面视图上实现某些特定的动画属性。但是这样的属性动画只能支持到android3.0版本或以上,在早期的版本上设置viewpager的PageTransformer会被忽略。公有方法原创 2016-08-20 23:02:27 · 9734 阅读 · 4 评论 -
CoordinatorLayout+CollapsingToolbarLayout+Toolbar+Listview/Gridview
CollapsingToolbarLayout中放Imageview和toolbar,然后下面放listview不能实现recycleview或者NestedScrollView同样的效果。google了吧,在Stack Overflow 上找到了答案。用下面这句就好了ViewCompat.setNestedScrollingEnabled(listView/gridview,true); (原创 2016-05-05 10:36:39 · 966 阅读 · 0 评论 -
Android Gradle manifestPlaceholders 的妙用
开发中很多时候我们会遇到这种场景,比如说:在用到一个第三方sdk,但是这个sdk并没有区分开发环境和线上环境,这时候我们就可能会申请两个不同的key标识,而且很多key标识都只能在androidmanifest里面配置。所以每次上线生成apk就必须手动去更改key标识,如果渠道版本少也还好,打包速度快也还行,需要区分环境的的key标识相对较少也还不错 ,但是如果你一项都沾不到边,到时忘记哪个key忘原创 2016-07-30 20:37:34 · 56252 阅读 · 3 评论 -
Android 计时器 Chronometer的简单实用
Chronometer 是一个继承TextView的控件,利用handler计算时间值再显示。布局文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width原创 2015-11-07 18:23:25 · 665 阅读 · 0 评论 -
Android应用监听自己被卸载
最近做项目需要知道自己何时被卸载了,开始就想到监听程序被卸载的广播。但是这样并不行,想了想当程序被卸载时,首先系统会退出程序在内存的进程,进程都没有了,广播当然也收不到了。 网上搜索了下,发现几篇博客很有用。。。 http://www.cnblogs.com/zealotrouge/p/3157126.html http://www.cnblogs.com/zealotrouge原创 2015-09-06 17:11:41 · 2857 阅读 · 0 评论 -
Android Uri带中文乱码问题
最近做个项目要获取用户默认铃声,并保存到数据库,但是我的手机获取到了系统默认铃声,但是uri里面带了乱码,一直不能通过uri转成真实路径。解决代码如下: Uri systemDefaultRingUri = RingTools.getSystemDefaultRingUri(getContext()); LogTools.getInstance().i("原uri="+systemDefa原创 2015-09-06 10:00:06 · 1622 阅读 · 0 评论 -
Android studio 安装中遇到一些问题的解决办法,分享一下
从eclipse转到android studio也是很无耐,刚开始总是会遇到很多难题,但是都不要轻言放弃。以下是我遇到的问题,并通过搜索引擎找到的解决办法,善用工具,善用头脑,勿为伸手之人。Android Studio需要JDK 1.7+才可以安装,不过这个时候也要升级到1.7了。安装完成之后第一次启动的时候会首先显示Fetching Android SDK compone原创 2015-08-10 10:25:15 · 591 阅读 · 0 评论 -
Android自定义控件使用-仿ios来电接听按钮
Android自定义控件使用-仿ios来电接听按钮开发自定义控件步骤1.编写继承自View的子类或viewGroup的子类2.为自定义View类增加属性3.绘制控件4.响应用户消息5.自定义回调函数自定义控件的一些方法 onFinishInflate() 回调方法,当应用从XML加载该组件并用它构建界面之后调用的方法 onMeasure() 检测View组件及其子组件的大小 onLayout(原创 2015-08-28 16:30:18 · 2629 阅读 · 3 评论 -
利用windowManager在所有窗口之上填出一个界面,类似来电界面。
首先需要获取布局窗口管理器(WindowManager)private static WindowManager wm = null;if (wm == null) { wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); }//获取屏幕高度int h = wm.getD原创 2015-08-17 17:03:37 · 1099 阅读 · 0 评论 -
Android将获取到文件的uri转换为字符串的路径
/** * 将uri转换为字符串 */ public static String UriToString(Uri uri, Activity act) { String img_path = null; if(uri != null && act != null){ String path = ""; String[] proj = { MediaStore.Images原创 2015-07-31 16:04:28 · 2411 阅读 · 0 评论 -
Android 实现计时器功能
最近有个项目要实现记录时间推进的功能,之前百度了下,发现了android自带控件(Chronometer)可以实现这个功能,详见之前写的博客 http://blog.csdn.net/qq_21793463/article/details/49704121但是Chronometer的自带api太少,无法适应太复杂的场景,比如暂停后Chronometer其实还是在记录时间,也无法很好的记录时间的推移原创 2015-11-08 23:03:31 · 1818 阅读 · 1 评论 -
Android Gradle BuildConfig的妙用
首先我们看看buildconfig在哪个目录下,一个是debug环境,另一个是当你打包apk才会生成 的release正式环境的buildconfig,我这里是为了比对,都生成出来了。 debug环境下的buildconfig/** * Automatically generated file. DO NOT MODIFY * 已经说明了这个文件是自动生成的,不要去改变它 */pa原创 2016-07-25 22:55:50 · 4474 阅读 · 3 评论 -
基类的popupwindow,带点击区域外消失,返回键消失
public class BasePopupWindow extends PopupWindow { public Context mContext; public BasePopupWindow (Context context) { super(context); this.mContext = context; //popWindo原创 2016-07-04 16:10:43 · 464 阅读 · 0 评论 -
StickyListHeadersListView的使用
先上图 布局文件<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_hei原创 2015-12-22 20:35:26 · 2594 阅读 · 0 评论 -
Android自定义dialog实现支付宝支付成功样式
先看图 自定义Dialogpublic class LoadingDialog extends Dialog { private View loading_layout; private ImageView iv_loading; public LoadingDialog(Context context) { this(context, R.style.Load原创 2016-01-05 20:37:45 · 2487 阅读 · 0 评论