自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 Android换肤框架Android-Skin-Loader源码解析

本篇文章是针对Android端换肤框架Android-Skin-Loader的源码解析整个框架的架构从加载皮肤说起SkinManager.getInstance( ).load一行代码便实现了换肤功能,那么进入该方法看看具体是怎样实现的SkinManager.javapublic void load(String skinPackagePath, final ILoaderLi...

2019-03-29 18:15:42 1171 3

原创 nodejs-node指令执行js,相对路径的问题

采用原生node.js路由时,相对路径的问题在dos命令行中执行node命令时,直接使用的绝对路径运行的js文件,而在进行路由时,采用的是相对路径,于是出现no such file or directory.而代码中路由时,采用的相对路径读取HTML文件,于是才有了不能找到文件的error.出现该问题时,一开始没有通过throw error查看异常,浏览器访问指定url时,界面没有渲染出...

2018-11-05 00:47:22 2410

原创 Glide3.7从URL加载图片的执行流程

Glide加载网络图片 根据郭霖的《从源码的角度理解Glide的执行流程》总结出Glide3.7版本加载网络图片的流程

2018-09-13 10:09:26 617

原创 Gradle Build 出错:It is currently in use by another Gradle instance.

分别build 3次 依次出现下面的错误:Timeout waiting to lock file hash cache (/Volumes/SHARED/zyco/androidProjects/MyApplication3/.gradle/4.4/fileHashes). It is currently in use by another Gradle instance.Owner PI...

2018-07-27 10:15:21 8773 1

原创 VideoView播放raw目录下的资源以及满屏播放问题

1.播放raw目录下的MP4文件String uri="android.resource://"+getActivity().getPackageName()+"/"+R.raw.open_movie;mVideoView.setVideoURI(Uri.parse(uri));2.播放满屏在xml文件中设置videoview的长宽皆为match_parent ,播放视频的...

2018-04-27 18:13:27 1175 2

原创 解决RadioButton设置drawable居中问题

xml文件:<RadioButton android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:button="@null" android:drawableTop="@drawable/selector_gende...

2018-04-17 10:04:44 1611

原创 SpringMVC--前端控制器DispatcherServlet执行Handler并解析视图

1.执行handler前端控制器DispatcherServlet在doDispatch( )方法中去获取HandlerMapping和HandlerAdapter。所以查看doDispatch( )方法的源码:进入getHandler( )方法可以看出,在getHandler( )方法中遍历了已有的handlerMapping,然后调用handlerMapping.getHandler(requ...

2018-04-07 17:59:37 2821

转载 android设备的唯一标识

获取一个能唯一标识每台Android设备的序号与服务器通信所以如果你想得到设备的唯一序号, TelephonyManager.getDeviceId() 就足够了。但很明显暴露了DeviceID会使一些用户不满,所以最好把这些id加密了。实际上加密后的序号仍然可以唯一的识别该设备,并且不会明显的暴露用户的特定设备,例如,使用 String.hashCode() ,结合UUID:St

2017-12-30 16:33:35 262

原创 targetSdkVersion<23中调用checkSelfPermission的问题

App 的targetSdkVersionContextCompat.checkSelfPermission()不会起作用,就算通过打开应用详情,设置了权限(允许或拒绝),ContextCompat.checkSelfPermission依然会返回0(表示权限允许)。打开应用详情:public void setPermission(){ Intent intent=ne

2017-11-10 15:02:21 737

原创 使用Glide加载GIF图时遇上的问题

在第一个页面中,使用Glide加载GIF时,未设置asGif或diskcachestrategy.NONE,第一个页面中的ImageView能正常加载并播放GIF图: @BindingAdapter("icon") public static void setIcon(ImageView imageView,String url){ Glide.with(imag

2017-10-26 01:14:05 16668

转载 ContentProvider中的getType返回的MIME有什么作用

转自:http://blog.csdn.net/harvic880925/article/details/44620851一、概述在上篇中,我们讲了通过共享数据库的增、删、改、查问题,但在生成PeopleContentProvider类时,由于其派生自ContentProvider,所以我们我们重写了数据库操作的insert()、query()、update()、delete()函数,但对

2017-09-25 11:09:08 633

原创 SocketDemo 类似聊天室

服务端Java代码:public class SocketDemo { private static final int SOCKET_PORT = 50000; public static ArrayList socketList = new ArrayList(); public static void main(String[] args) { ServerSocket se

2017-09-23 17:11:32 283

原创 android studio 打包AAR并将AAR引入u3d

打包方法:然后找到生成的AAR:      导入u3d时需要注意:先用压缩软件打开aar文件,然后删除libs文件夹中的classes.jar如果删除了下图中的classes.jar:  不删除classes.jar就会出现:Failed to Move File / Directory from 'Temp/StagingArea\

2017-09-19 10:59:10 707

转载 dispatchDraw

Android的view组件显示主要经过mesure, layout和draw这三个过程。在mesure阶段里调用mesure(int widthSpec, int heightSpec)方法,这个方法是final不能被重写,在这个过程里会调用onMesure(int widthSpec, int heightSpec)方法。当组件设置好大小后,调用final layout(int l, int

2017-08-12 10:50:09 880

转载 application/x-www-form-urlencoded

form的enctype属性为编码方式,常用有两种: application/x-www-form-urlencoded 和 multipart/form-data , 默认为application/x-www-form-urlencoded 。当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&nam

2017-07-22 09:37:03 366

原创 旋转矩形框

MotionEvent中getAction( )与getActionMasked( )的区别:getAction( )得到的值是由触控点index + 触控事件 构成;getActionMasked( )得到的值仅由 触控事件 构成.onTouchEvent(MotionEvent event)的实现:public boolean onTouchEvent(Motion

2017-07-12 19:31:33 1086

原创 android 7.0 JobService启动时onStartJob执行问题

MainActivity.java:public class MainActivity extends AppCompatActivity { @TargetApi(24) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc

2017-06-23 10:36:40 4877 1

转载 ?android:attr/属性 与 ?android:属性

引用资源时,使用@还是?的区别,例如在设置style的时候既可以使用@也可以使用? style="?android:attr/progressBarStyleHorizontal" style="@android:style/Widget.ProgressBar.Horizontal"使用@表示使用固定的style,而不会跟随Theme改变,这style可以在对应的style.

2017-05-28 20:15:14 3330

转载 android屏幕及尺寸单位

获取屏幕参数代码:Java代码  收藏代码DisplayMetrics metric = new DisplayMetrics();  //API 17之后使用,获取的像素宽高包含虚拟键所占空间,在API 17之前通过反射获取  context.getWindowManager().getDefaultDisplay().getRealMetrics(metric);  //获

2017-05-27 17:43:06 554

原创 拨号盘

总体思路:1.单击Button将对应的值添加到TextView中;2.设置监听TextView文本的改变;3.重写TextWatcher中的afterTextChanged()方法,里面实现读取联系人的功能;4.将TextView中的内容与读取到的联系人号码进行匹配;5.将符合要求的电话号码显示在ListView中;6.单击拨号Button或ListView子项拨打电话;

2017-05-09 22:49:10 499

原创 实现一键关屏功能

实现一键关闭屏幕的功能,需要获得系统服务DevicePolicyManager mDevicePolicyManager=(DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);通过这个DevicePolicyManager类,能够实现关闭屏幕功能,但需要获得设备管理权限。关键代码如下: m

2017-05-08 00:25:37 659

原创 读取短信并复制验证码小工具

获取短信有两种方式,第一种是通过广播接收器,第二种通过读取短信数据库。第一种:静态注册了一个广播,通过接收包含android.provider.Telephony.SMS_RECEIVED动作的广播,获取新收到的短信内容。 <receiver android:name=".GetSMS" android:enabled="t

2017-05-06 00:38:55 5006 3

转载 AIDL中的定向tag

AIDL中的定向 tag 表示了在跨进程通信中数据的流向,其中 in 表示数据只能由客户端流向服务端, out 表示数据只能由服务端流向客户端,而 inout 则表示数据可在服务端与客户端之间双向流通。其中,数据流向是针对在客户端中的那个传入方法的对象而言的。in 为定向 tag 的话表现为服务端将会接收到一个那个对象的完整数据,但是客户端的那个对象不会因为服务端对传参的修改而发生变动;out

2017-05-04 12:46:35 608

原创 ComponentName

ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的。Identifier for a specific application component (Activity, Service, BroadcastReceiver, or ContentProvider) that is available. Two pieces of informati

2017-05-03 16:42:11 561

原创 正则表达式 \\\\

"\\\\"字符串中,两个反斜杠被解释为一个反斜杠,再作为正则表达式, \\ 则被正则表达式引擎解释为 \,所以在正则表达式中需要使用四个反斜杠表示"\""*"表示零次或多次匹配前面的字符或子表达式,等价于{0,},例如:zo* 匹配"z"和"zoo"这里星号对 o 起作用,所以 o 可以出现零次或多次,所以可以匹配:z //o 出现0次zo //o 出现1次zoo //o 出

2017-04-26 14:07:08 2662

转载 android xml文件中透明效果设置

在xml文件中,可以直接写#0000,这个是全透明的效果。#9000这个值相当于56%的样子,因为颜色值是16进制的,#9000相当于(9/16)而百分比的话,大家可以按照这个比例来换算全透明 #000010%透明 #1600 20%透明 #320030%透明 #480040%透明 #640050%透明 #800060%透明 #960070%透明 #B200

2017-04-22 20:24:58 1454

转载 @SerializedName注解

在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。  Gson解析json的方法我这里就不详细说明了,网上一大把的例子,我这里主要说一下使用@SerializedName进行注解的情况。  使用Gson解析json成对象时默认的是将json里对应字段的值解析到java对象里对应字段的属性里面。然后我们经常会遇到我们自己定义的ja

2017-04-21 09:11:25 515

转载 android:process=":remote"属性

一般情况下一个服务没有自己独立的进程,它一般是作为一个线程运行于它所在的应用的进程中。但是也有例外,Android声明文件中的android:process属性却可以为任意组件包括应用指定进程,换句话说,通过在声明文件中设置android:process属性,我们可以让组件(例如Activity, Service等)和应用(Application)创建并运行于我们指定的进程中。例如:一个应

2017-04-12 17:04:08 451

原创 Http Range请求头格式

Range 请求头格式Range: bytes=start-endRange: bytes=5- :第5个字节及最后个字节的数据Range: bytes=10-100 :第10个字节到第100个字节之间的数据.  注意,这个表示[start,end],即是包含请求头的start及end字节的,所以,下一个请求,应该是上一个请求的[end+1, nextEnd] :Range:

2017-04-08 09:49:05 1819

转载 外部存储

外部存储:最容易混淆的是外部存储,如果说pc上也要区分出外部存储和内部存储的话,那么自带的硬盘算是内部存储,U盘或者移动硬盘算是外部存储,因此我们很容易带着这样的理解去看待安卓手机,认为机身固有存储是内部存储,而扩展的T卡是外部存储。比如我们任务16GB版本的Nexus 4有16G的内部存储,普通消费者可以这样理解,但是安卓的编程中不能,这16GB仍然是外部存储。所有的安卓设备都有

2017-04-08 09:28:58 641

原创 参数数组String...

public class test1 {public static void main(String[] args){Test();Test("a");Test("a","b","c");}public static void Test(String... params){System.out.println("参数长度"+params.length);}}

2017-04-07 21:52:21 497

原创 关于unbindService未调用onServiceDisconnected

1、onServiceDisconnected() 在连接正常关闭的情况下是不会被调用的.2、该方法只在Service 被破坏了或者被杀死的时候调用. 例如, 系统资源不足, 要关闭一些Services, 刚好连接绑定的 Service 是被关闭者之一,  这个时候onServiceDisconnected() 就会被调用.

2017-04-07 11:24:08 6588 3

转载 android访问本地Web服务器

模拟机访问127.0.0.1来访问,都是访问模拟器本身你想在模拟器上面访问安装模拟器的电脑,那么就使android内置的IP:10.0.2.2 10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名

2017-04-04 09:42:20 719

原创 关于Environment.getExternalStorageDirectory()

使用华为手机调试的时候,Environment.getExternalStorageDirectory().getPath()返回的路径是空的.原因如下:不同的设备上,调用getExternalStorageDirectory()返回值不一样。这个方法返回的是当前设备厂商所认为的“外部存储”,有可能返回外置的SD卡目录(Micro SD Card),也可能返回内置的存储目录(eMMC)。g

2017-03-30 14:31:16 4656 2

原创 android7.0从相册中选择照片

相册中的照片都是存储在external-storage,需要动态申请WRITE_EXTERNAL_STORAGE权限.if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){

2017-03-29 20:32:09 6308

转载 java访问权限修饰符

java的访问权限有四种,public,protected,default,private类: public,default变量和方法:public,protected,default,privatepublic:  可以被   任何地方的别的类   访问protected:可以被同一个package的类    和    该类的子类  访问default:只可以被

2017-03-28 09:19:12 267

转载 java基本数据类型

在JAVA中一共有八种基本数据类型,他们分别是 byte、short、int、long、float、double、char、boolean 整型 其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样 byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) short的取值范围为-32768~32767,占用2个字节(-

2017-03-19 20:11:06 257

原创 内部类与静态内部类的实例化

public class test {public static void main(String[] args){Person p=new Person();Person.life li=p.new life();}}class Person{class life{public life(){System.out.println("人需要生

2017-03-18 20:17:39 521

转载 ObjectOutputStream 与 ObjectInputStream创建的先后顺序

You need to create the ObjectOutputStream before the ObjectInputStream at both sides of the connection(!). When the ObjectInputStream is created, it tries to read the object stream header from t

2017-03-16 16:26:04 434

原创 字符流Reader正确读取记事本中的中文字符

import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.InputStreamReader;import java.nio.charset.Charset;public class Test12 {public static voi

2017-03-16 14:44:37 654

空空如也

空空如也

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

TA关注的人

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