04 2014 档案
摘要:最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子。还是很有趣的,实现的流畅度没有人家的那么好,我只是模仿这种效果,我写的这个拖拽是两个图标之间进行交换,所以,当从一行的某个位置,换到下 一行...
阅读全文
摘要:1. Java中堆栈(stack)和堆(heap)(1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代...
阅读全文
摘要:Java线程池使用说明一 简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我...
阅读全文
摘要:第一步 Java代码 finalLayoutInflaterinflater=LayoutInflater.from(this);第二步:获取需要被添加控件的布局Java代码 finalLinearLayoutlin=(LinearLayout)findViewById(R.id.LinearLay...
阅读全文
摘要:在Android开 发中,在Activity中关联视图View是一般使用setContentView方法,该方法一种参数是使用XML资源直接创 建:setContentView (int layoutResID),指定layout中的一个XML的ID即可,这种方法简单。另一个方法是 setConte...
阅读全文
摘要:1 imageView.setScaleType(ImageView.ScaleType.FIT_XY ); 1 这里我们重点理解ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)。android:s...
阅读全文
摘要:Timer相信大家都已经非常熟悉 java.util.Timer 了,它是最简单的一种实现任务调度的方法,下面给出一个具体的例子:清单 1. 使用 Timer 进行任务调度 package com.ibm.scheduler; import java.util.Timer; import jav...
阅读全文
摘要:Style:Style是View中一些属性的集合,包括height,padding,font color,background等等,Style单独定义在xml文件中,类似与web页面中css的角色,将设计和内容分开,便于修改和重复使用。定义Style:style文件需要保存在res/values目录...
阅读全文
摘要:本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和门户网站都有类似的实现:具体思路:1. 工程中需要添加android-support-v4.jar,才能使用ViewPager控件.2. 图片的自动切换: 可使用Timer或者ScheduledExecuto...
阅读全文
摘要:最近在做图片的浏览功能,开始是使用Gallery做,但是,达不到我想要的效果,关于使用Gallery显示缩略图的缺点和优点,不在详述了。以下是一个完整的Demo代码,注意我的模拟器是640*960。[java] view plaincopyprint?packagecom.treasure.ui;i...
阅读全文
摘要:经常有这样的需求,你的功能图标要像一个个物品,摆放在书架上,像这样:我的思路比较简单,重载GridView,在他绘制子视图前,先把背景绘制完成12345678910111213141516171819202122232425262728293031323334publicclassRowGridVi...
阅读全文
摘要:MainActivity如下:package cc.testfilterable;import java.util.ArrayList;import java.util.HashMap;import android.os.Bundle;import android.widget.ListView;i...
阅读全文
摘要:整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为根据之前设置的状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘(draw),其框架过程如下: 接...
阅读全文
摘要:invalidate()函数的主要作用是请求View树进行重绘,该函数可以由应用程序调用,或者由系统函数间接 调用,例如setEnable(), setSelected(), setVisiblity()都会间接调用到invalidate()来请求View树重绘,更新View树的显示。 注:req...
阅读全文
摘要:绘制VIew本身的内容,通过调用View.onDraw(canvas)函数实现绘制自己的孩子通过dispatchDraw(canvas)实现 View组件的绘制会调用draw(Canvas canvas)方法,draw过程中主要是先画Drawable背景,对 drawable调用setBounds...
阅读全文
摘要:onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,Android这么设计的想法也很好理解,由于ViewGroup会包含若干childView,因此需要能...
阅读全文
摘要:前言Context在android中的作用不言而喻,当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context,而这 个Context到底是什么呢,这个问题好像很好回答又好像难以说清楚。从字面意思,Context的意思是“上下文”,或者也可以叫做环境、场景等,尽 管如此,还...
阅读全文
摘要:8.位操作符: 从一个给定的数n中找位i(i从0开始,然后向右开始)123456789public static boolean getBit(int num, int i){int result = num & (1 0) { // get right most bit & shift ri...
阅读全文
摘要:动态编程主要用来解决如下技术问题:An instance is solved using the solutions for smaller instances;对于一个较小的实例,可能需要许多个解决方案;把较小实例的解决方案存储在一个表中,一旦遇上,就很容易解决;附加空间用来节省时间。上面所列的爬...
阅读全文
摘要:不同排序算法的时间复杂度,大家可以到wiki上查看它们的基本思想。 BinSort、Radix Sort和CountSort使用了不同的假设,所有,它们不是一般的排序方法。下面是这些算法的具体实例While analyzing source code of a large number of op...
阅读全文
摘要:3.树&堆这里的树通常是指二叉树。12345class TreeNode{int value;TreeNode left;TreeNode right;}下面是一些与二叉树有关的概念:二叉树搜索:对于所有节点,顺序是:left children preorderTraversal(TreeNode...
阅读全文
摘要:1.String/Array/Matrix在Java中,String是一个包含char数组和其它字段、方法的类。如果没有IDE自动完成代码,下面这个方法大家应该记住:12345678910toCharArray() //get char array of a StringArrays.sort() ...
阅读全文
摘要:在开始实例讲解之前,先引用官方文档中的一段话:Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XML文件中,也可以完全编码实现。如果被定义在XML文件中,我们可以放置在/res下的anim或drawable目录中(/res/[an...
阅读全文
摘要:前面讲了动画中的Frame动画,今天就来详细讲解一下Tween动画的使用。同样,在开始实例演示之前,先引用官方文档中的一段话:Tween动画是操作某个控件让其展现出旋转、渐变、移动、缩放的这么一种转换过程,我们成为补间动画。我们可以以XML形式定义动画,也可以编码实现。如果以XML形式定义一个动画,...
阅读全文
摘要:1、在SDK Manager下Tools->Options打开了SDK Manager的Settings,选中“Force https://… sources to be fetched using http://…”,强制使用http协议。2、修改host文件,添加下面几行#Google主页203...
阅读全文
摘要:界面XML文件:preference_setting.xml[java] view plaincopyprint? PreferenceActivity 的类文件:[java] view plaincopyprint?packagecom.icitylif...
阅读全文
摘要:PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置,这些设置习惯用Preference来保存。Android专门为这种Activity提供了便捷的基类PreferenceActivity。如果继承自Preference则不需要自己控制Prefer...
阅读全文
摘要:1 概览l TabWidget与TabHost。tab组件一般包括TabHost和TabWidget、FrameLayout,且TabWidget、FrameLayout属于TabHost。l 是否继承TabActivity的问题l 实现步骤。两种实现方式,一种是将每个Tab的布局嵌在TabHost...
阅读全文
摘要:开发中,难免会遇到各种各样的适配问题,尤其是经过深度修改定制过的系统,有的无论是软硬件上都有很大的区别,这里不得不提到一种奇葩的机型,没错,那就是双卡双待的手机(比如XT800, A60, S8600 , Lenovo A750,中兴V889D等).由于是双SIM卡,而且两个卡槽支持的运营商或者网络...
阅读全文
摘要:目前国内对于双卡智能手机的需求还是很大的,各种复杂的业务会涉及到双卡模块;而android标准的api又不提供对双卡的支持。导致国内双卡模块标准混乱,各个厂商各玩各的。目前我知道的双卡解决方案就有:mtk,展讯,高通,broadcom等。由于公司业务需要,必须要对双卡手机获取各自的imei,imsi...
阅读全文
摘要:1.在AndroidManifest文件下添加SDCard的读写权限2.文件操作的各种模式如下代码:(注意通过getExternalStorageDirectory方法获取SDCard的文件路径)package com.hoo.file;import java.io.ByteArrayOutputS...
阅读全文
摘要:有些库的使用条件比较苛刻,要求同一签名的程序才可以获得访问权。此时即便是在AndroidManifest.xml中添加了相应的permission,依旧会得到没有xx访问权限的问题。比如android.permission.ACCESS_SURFACE_FLINGER 。第一个方法简单点,不过需要在...
阅读全文
摘要:由于国内的运营商问题,双卡手机获取IMSI号问题要根据厂商API 来实现。下面我们就来做一套完整的分析运营商获取IMSI号逻辑。1,首先我们要判断手机的平台。1.1,判断手机是否MTK平台12345678910111213141516171819202122232425262728293031323...
阅读全文
摘要:通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的。phoneType获取方法,iTelephony.getActivePhoneType();//1=GSM,2=CDMAtry { Class smsM...
阅读全文
摘要:随着Android版本的增多,在不同的版本中使用不同的设计是必须的,根据程序运行的版本来提供不同的功能。这涉及到如何在程序中判断Android系统的版本。在Android api中的android.os.Build和android.os.Build.VERSION类中包含了Android版本信息。可...
阅读全文
摘要:android中的意图有显示意图和隐式意图两种,显示意图要求必须知道被激活组件的包和class隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件A 主activity B 接收跳转的activity步骤1:在主配置文件中声明B 至少要声明一个android:name属性[htm...
阅读全文
摘要:ActivityGroup简介1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager如,LocalActivityManager am= getLocalActivityManager();2.然...
阅读全文
摘要:如果用系统默认的tabhost时,直接用getTabhost()初始化,整个类继承tabActivity。当没有选择系统tabhost默认id时,而是自己定义的id时,必须使用findViewById(R.id.tabhostname);setup()或者setup(LocalActivityMan...
阅读全文
摘要:在做项目的时候,需要用到这个选项卡,刚开始看了系统的tabwidget,囧了,底边有黑线不说,还不美观,扒了好多的网页发现前辈做的能够满足自己的需求,将代码修改了下,就能用喽,伟人说过,站在前辈的肩膀上,我们能看的更远。不多少了,上源码...tabwidget.xml@android :id/tab...
阅读全文
摘要:如新浪微博下面的标签切换功能,我以前也写过一篇博文(http://www.cnblogs.com/tiantianbyconan/archive/2012/02/24/2366237.html),可以实现,用的是TabHost。但是android发展比较迅速,TabHost这玩意现在已经被弃用了,虽...
阅读全文
摘要:一、实现效果图二、项目工程结构三、详细代码编写1、主tab布局界面,main_tab_layout:双击代码全选1234567891011121314151617181920212223242526 2、Tab按钮选项布局,tab_item_view.xml:双击代码全选1234567891011121314151617181920212223242526 3、fragment布局界面,这里只列出一个,fragment_1.xml:双击代码全选1234567891011121314 4、Tab选项的自定义按钮资源文件,列出其中一个按钮,tab_home_btn:双击代...
阅读全文
摘要:第一种,TabActivity 解决方案下面建立的布局文件,它包含多个标签的显示组件 1234567891011121314151617181920212223242526272829import android.app.TabActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.widget.Ta...
阅读全文
摘要:android源码中包含了大量的设计模式,除此以外,android sdk还精心为我们设计了各种helper类,对于和我一样渴望水平得到进阶的人来说,都太值得一读了。这不,前几天为了了解android的消息处理机制,我看了Looper,Handler,Message这几个类的源码,结果又一次被googler的设计震撼了,特与大家分享。android的消息处理有三个核心类:Looper,Handler和Message。其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因此我没将其作为核心类。下面一一介绍:线程的魔法师 LooperL
阅读全文
摘要:我们在Java程序中使用日志功能(JDK Log或者Log4J)的时候,会发现Log系统会自动帮我们打印出丰富的信息,格式一般如下:为了免去解析StackTrace字符串的麻烦,JDK1.4引入了一个新的类,StackTraceElement。 一、问题的引入 我们在Java程序中使用日志功能(JDK Log或者Log4J)的时候,会发现Log系统会自动帮我们打印出丰富的信息,格式一般如下: [运行时间] [当前类名] [方法名] INFO: [用户信息] 具体例子如Tomcat启动信息: Jul 9, 2004 11:22:41 AM org.Apache.coyote.http...
阅读全文
摘要:Java中的守护线程 & 非守护线程守护线程 (Daemon Thread)非守护线程,又称用户线程(User Thread)用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。守护线程最典型的应用就是 GC (垃圾回收器)守护线程通常是由虚拟机自行创建使用,不过通过编码同样可以创建守护线程,而且 very easy:Thread daemonTread = new Thread(); // 设定 daemonThread 为
阅读全文
摘要:在本节中,你会学到1、定义接口2、实现接口3、将消息传递给fragment为了重用Fragment UI 组件,在设计中你应该通过定义每一个fragemnt自己的layout和行为,让fragment的自包含和模块化。一旦你定义了这些可重用的 Fragment,你可以通过Activity将它们关联起来并通过程序的逻辑代码将他们连接起来以实现整体组合的UI。你会经常想要一个fragment与另一个fragment通信,例如基于用户事件改变fragment中的内容。所有fragment质检单额通信都是通过Activity关联起来的。两个fragment之间不应该直接进行通信。定义接口为了允许fra
阅读全文
摘要:Android开发学习之LauncherActivity开发启动的列表创建项目:OtherActivity项目运行结果:建立主Activity:OtherActivity.java[java]package wwj.otherActivity;import android.os.Bundle;import android.app.Activity;import android.app.LauncherActivity;import android.content.Intent;import android.view.Menu;import android.view.MenuItem;impor
阅读全文
摘要:有时候android传统的页面布局不足以满足我们的需求,常常需要自己定义view,通常继承View,然后重写构造方法以及onDraw等函数,再 具体实现自己定义的复杂view。我们知道在给控件赋属性时,通常使用的是android系统自带的属性,比如 android:layout_height="wrap_content",除此之外,我们亦可以自己定义属性,这样在使用的时候我们就可以使用形如 myapp:myTextSize="20sp"的方式了,步骤大致如下:1》在项目文件res/value下面创建一个attr.xml文件,该文件中包含若干个attr集合
阅读全文
摘要:Camera拍照:今天做照相机程序,结果写好了发现出问题了,预览的图像差90度。相关源代码如下: Camera.Parameters params = camera.getParameters(); params.setPreviewSize(width, height);params.setPreviewFrameRate(4); params.setPictureFormat(PixelFormat.JPEG); params.set("jpeg-quality", 85); params.setPictureSize(width, height); camera.se
阅读全文
摘要:this 在 JavaScript 开发中占有相当重要的地位,不过很多人对this这个东西都感觉到琢磨不透。要真正理解JavaScript的函数机制,就非常有必要搞清楚this到底是怎么回事。函数调用方式不同,this 含义也跟着不同。JavaScript语言中有七种调用函数方式:第一种:调用方法var obj = { method: function() { alert(this === obj); }}obj.method();上面这行obj.method()显然method是作为方法被调用,这种情况下,函数体中的this绑定的就是method的宿主对象,也就是obj。从这种调用方式我们得
阅读全文
摘要:简单的说,比较两个int型或long型的数据没有什么问题,可以用==来判断,但对浮点数(float与double)来说,需要对Float.NaN和0.0这个两个特殊数字作额外的处理。Float.NaN严格说来不是一个数字(它的字面意思也就是Not a Number),但是因为这个值可以被保存在一个float型的变量中(因为它常常是除0的结果),所以暂且当它是个数字吧。但它与一般的浮点数有些许不同,就是两个NaN用==比较的结果会得到false。可以用下面的代码验证:Code highlighting produced by Actipro CodeHighlighter (freeware)h
阅读全文
摘要:看到很多书中都没有对PreferenceActivity做介绍,而我正好又在项目中用到,所以就把自己的使用的在这总结一下,也方便日后查找。PerferenceActivity是什么,看下面的截图: Android系统截图(左) MusicPlayer Setting截图(右) 好了,我们看到Android系统本身就大量用到了PreferenceActivity来对系统进行信息配置和管理,那么它是怎么保存数据的呢,如何创 建PrefenceActivity的呢,更关键是怎样触发相应事件的呢。 先看第一个问题,PreferenceActivity是如何保存的数据。对Android系统了解的都知道,
阅读全文
摘要:在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全。我试过很多种方法,它们各有利弊。在这里我将会从使用ScrollView嵌套ListView结构的原因、这个结构碰到的问题、几种解决方案和优缺点比较,这4个方面来为大家阐述、分析、总结。实际上不光是ListView,其他继承自AbsListView的类也适用,包括ExpandableListView、GridView等等,为了方便说明,以下均用ListView来代表。一、 为什么要使用ScrollView嵌套ListView的奇怪的结构 ScrollView和ListView都是滚动结构,.
阅读全文
摘要:sendStickyBroadcast和sendStickyOrderedBroadcast发出的广播会一直滞留(等待),以便有人注册这则广播消息后能尽快的收到这条广播。其他功能与sendBroadcast相同。但是使用sendStickyBroadcast 发送广播需要获得BROADCAST_STICKYpermission,如果没有这个permission则会抛出异常。例子:[java]view plaincopyprint?packagecom.android.test;importandroid.app.Activity;importandroid.content.Context;im
阅读全文
摘要:本文主要内容: 1、FTP服务端部署---- 基于Android中SwiFTP开源软件介绍; 2、FTP客户端部署 --- 基于ftp4j开源jar包的客户端开发; 3、使用步骤 --- 如何测试我们搭建的FTP可操作性。 本文所涉及到的知识、文档、源代码照旧会在文章末尾列出。欢迎大家一起学习。一、 FTP服务端部署 SwiFTP开源软件是为Android系统开发,也就是说我们可以将其源代码嵌入到我们的项目中。当然,对其进行 一定改造还是必不可少的。这儿只是从感官上对SwiFTP的运行效果图进行一下说面,以便帮助大家有初步认识: Sw...
阅读全文
摘要:今天继续讲解关于ActivityManager的使用,通过前面一节的学习,我们学会了如何利用ActivityManager获取系统里正在运行的进程。本文要讲解的知识点是利用这些进程信息获取系统里正在运行的应用程序以及每个进程里运行的应用程序。用到的知识点也包括PackageManager的使用,读者阅读在我之前写的blog《PackageManager的使用》 每一个应用程序都会运行在它独立的进程里,但是为了节省资源或者这些应用程序是为了完成某一共同工作,它们也可能会运行在一个进程里。 知识点介绍: ActivityManager.RunningAppProcessInfo类 说明: 封装..
阅读全文
摘要:前言: 虽然本文标题的有点标题党的感觉,但无论如何,通过这篇文章的学习以及你自己的实践认知,写个简单的滑屏小Demo还是justso so的。 友情提示: 在继续往下面读之前,希望您对以下知识点有一定程度掌握,否则,继续看下去对您意义也不大。 1、掌握View(视图)的"视图坐标"以及"布局坐标",以及scrollTo()和scrollBy()方法的作用----- 必须理解 如果对这方面知识不太清楚的话,建议先看看我的这篇博客 , 不夸张地说,这篇博客理论上来说是我们这篇博文的基础。 2、知道onInterceptTouchEvent()以及onTouc
阅读全文
摘要:今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中scrollTo 与 scrollBy这两个函数的区别 。 首先 ,我们必须明白在Android View视图是没有边界的,Canvas是没有边界的,只不过我们通过绘制特定的View时对Canvas对象进行了一定的操作,例如 : translate(平移)、clipRect(剪切)等,以便达到我们的对该Canvas对象绘制的要求 ,我们可以将这种无边界的视图称为“视图坐标”-----它不受物理屏幕限制。通常我们所理解的一个Layout布局文件只是该视图的显示区域,超过了这个显示区域将不能显示
阅读全文
摘要:前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了 ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对ContentObserver做下总结。 ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器, 相应地ContentObserver也分为“表“ContentObserver、“行”ContentO
阅读全文
摘要:大家好, 今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中 时刻的在与它打交道,例如:Service、BroadcastReceiver、Activity等都会利用到Context的相关方法 ; 说它陌生,完全是 因为我们真正的不懂Context的原理、类结构关系。一个简单的问题是,一个应用程序App中存在多少个Context实例对象呢? 一个、两个? 在此先卖个关子吧。读了本文,相信您会豁然开朗的 。 Context,中文直译为“上下文”,SDK中对其说明如下: Interface to global information abo
阅读全文
摘要:通过第一部分>的介绍,对PackageManager以及AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识。本部分的内容是如何获取安装包得大小,包括缓存大小(cachesize)、数据大小(datasize)、应用程序大小(codesize)。本部分的知识点涉及到AIDL、Java反射机制。理解起来也不是很难。 关于安装包得大小信息封装在PackageStats类中,该类很简单,只有几个字段: PackageStats类: 常用字段: public long cachesize 缓存大小 public long codesize 应用程序大小 public
阅读全文
摘要:本节内容是如何获取Android系统中应用程序的信息,主要包括packagename、label、icon、占用大小等。具体分为两个部分,计划如下: 第一部分: 获取应用程序的packagename、label、icon等 ; 第二部分: 获取应用程序的占用大小,包括:缓存大小(cachsize)、数据大小(datasize)。 每部分都为您准备了简单丰富的实例,您一定不会错过。 Android系统为我们提供了很多服务管理的类,包括ActivityManager、PowerManager(电源管理)、AudioManager(音频管理)等。除此之外,还提供了一个PackageManger管理.
阅读全文
摘要:最近终于成功的摆脱了FM收音机,迈向了新的模块:锁屏、状态栏、Launcher---姑且称之为“IDLE”小组,或许叫手机美容小组,要是能施展下周星星同学的还我漂漂拳,岂不快哉。 OK,闲话打住,咱开始正文。 本文主要内容: 1、分析锁屏界面的组成 ; 2、基于源代码分析锁屏相关类 ; 3、提出一种在框架取消锁屏的方法 。 花了一些时间研究Android原生的锁屏框架---Keyguard,今天就慢慢的讲解下我自己对这个模块的总结,因为目前还处于 理论学习的状况,很多细节以及功能上的实现有待后续的补充完整。 本文分析适合Android2.2和2.3版本,An...
阅读全文
摘要:整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为根据之前设置的状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘(draw),其框架过程如下: 步骤其实为host.layout() 接下来温习一下整个View树的结构,对每个具体View对象的操作,其实就是个递归的实现。 关于这个 DecorView 根视图的说明,可以参考我的这篇博客: ...
阅读全文
摘要:更改文件所有者sudo chown system_username /location_of_files_or_folders更改文件的权限鼠标右按钮点击文件/目录 -> 属性权限 分页 -> 读取/写入/执行 (为 所有者/群组/其它 勾选权限)当前用户不是root,有一个分区是root的所有者应该怎样操作?sudo chmod 777 /XXX其中/XXX为你要更改得目录或文件,777为全部人都可以读写。用这个命令就可以设置文件限权。如果觉得不安全,可以设置为775 。使用方式 : chmod [-cfvR] [--help] [--version] mode file…说明
阅读全文
摘要:切换到安装文件目录$sudodpkg-ifile_name.deb如果有错误,请运行以下命令$sudoapt-get-finstallor$sudoapt-getinstalllibnspr4-0d$sudoapt-getinstalllibcurl3完成之后再运行$sudodpkg-ifile_name.deboksuccessedubuntu卸载google-chromesudoapt-getautoremovegoogle-chrome-stable(google-chrome按Tab键会自动完成)
阅读全文
摘要:首先简述自己的系统配置:win7+ ubuntu12.04linuxQQ 有各种版本,这里介绍两种:linuxQQ 和 wineQQ1 ------linuxqq是QQ简化版,功能很少,界面很差,但是安装简单 下载地址:http://im.qq.com/qq/linux/ 可以选择对听版本的系统以及QQ 。这里建议下载tar.gz的版本,然后解压,执行./QQ就搞定了,很简单吧。 下载后运行命令: tar xzvf ************.tar.gz ////**号代表你下载的文件名称 然后进入对应的的解压好的文件里面 执行命令: ./qq 就可以登陆QQ了 ,ok!!!2----...
阅读全文
摘要:xianbin@xianbin-ThinkPad-E520:~$ sudo dpkg --purge wine-qq2012-longeneteam[sudo] password for xianbin:(正在读取数据库 ... 系统当前共安装有 560901 个文件和目录。)正在卸载 wine-qq2012-longeneteam ...*Backup QQ users directory to your HOME.......*Backup done!*ldconfig....*Remove the entry from system menu......*Remove desktop i
阅读全文
摘要:Java code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213
阅读全文
摘要:Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如ok,我们开始吧:一)变换前背景先来看看progressbar的属性:1.根据style="?android:attr/progressBarStyleHorizontal",我们找到源码中的style.xml1.看到@android:drawable/progress_horizontal木有,继续发掘源码,找到drawable下面的progress_horizontal.xml,这就是我们今天的主角了:1.2.3.
阅读全文
摘要:最近迷上进度条,使用进度条可以增强用户体验,让用户心里有个底,再无奈的等待中体会loading的乐趣。记得以前优乐美的官网,进入主页加载资源,显示给用户看的就是,炫彩背景下,一个杯子里的奶茶随着加载进度慢慢加上来,这对于浏览网站的人来讲,等于一种享受,并不是难熬等待的时间,在等待的时间的时候,她们看到确实另一番景象而不是单纯的进度条。百度手机浏览器的做法又不一样,用户打开一个网页的时候,在后台请求资源并渲染,前台界面就是产品的宣传,几张宣传图相互切换,大部分PC软件的安装过程也是如此,在用户等待的时候,向用户宣传自己,让眼睛不会过度疲劳和产生厌倦感。好了,话不多少,今天我们看看手机QQ空间,点
阅读全文
摘要:介绍几个工作开发中封装的好用的android自定义控件首先看效果图,看下这两个界面,第一个中用到了一个自定义的FlowRadioGroup,支持复合子控件,自定义布局;第二个界面中看到了输入的数字 自动4位分割了吧;也用到了自定义的DivisionEditText控件。下面直接看源码FlowRadioGroup了; 1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License");
阅读全文
摘要:先看效果图吧,继上一篇《android自定义viewgroup实现等分格子布局》中实现的布局效果,这里稍微有些区别,每个格子的高度不规则,就是传说的瀑布流布局,一般实现这种效果,要么用第三方控件,如果不是加载图片还可以直接写在xml中实现,不过代码会很多的;下面我重写了viewgroup,实现 onMeasure,onLayout方法,动态设置每个布局的高度,这里有一个小的技巧,一般我们自定义的控件,嵌套在scrollview中显示不 全,这个问题也纠结我一小会,不过当你打开scrollview的源码,你会发现有一个地方,同时可以理解scrollview中嵌套 viewpager,gridvi
阅读全文
摘要:先上效果图:实现这样的效果:一般的思路就是,直接写布局文件,用LinearLayout 嵌套多层子LinearLayout,然后根据权重layout_weight可以达到上面的效果还有就是利用gridview了,但是这里的需求就是不能上下滑动,使用gridview的时候还要计算布局的高度,否则内容超出下滑;开始我是用的第一种,直接在布局文件实现了,但是后来发现代码太多太恶心哦,所以我继承viewGroup,重写两个关键的方法:onLayout(),onMeasure()我的大致思路:1.计算当前视图宽度和高度,然后根据边距,算出每个布局的item需要分配的多少宽度和高度:2.支持adapter
阅读全文
摘要:viewgroup简单说就是可以装view的view.今天遇到一个问题,就是需要一个可以自动根据一行中view的宽度自动换行的布局,网上 找了下,没有相关的例子,但是找到了思路:自定义一个viewgroup,然后在onlayout文件里面自动检测view的右边缘的横坐标值,和你的 view的parent view的况度判断是否换行显示view就可以了。因为代码比较简单,就不多说了: 1 public class MyViewGroup extends ViewGroup { 2 private final static String TAG = "MyViewGroup";
阅读全文
摘要:今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决。原因是:listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到listView的长度(这也是为什么在开始的第一张图特别的标出列表长 度),然后根据这个长度,调用getView()逐一绘制每一行。如果你的getCount()返回值是0的话,列表将不显示同样return 1,就只显示一行。 系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须 手动映射数据,这需要重写getView()方法。系统在绘制列表的每一行的时候将调用.
阅读全文
摘要:在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 经常要用到Service. 在不同的进程中, 怎样传递对象呢? 显然, Java中不允许跨进程内存共享. 因此传递对象, 只能把对象拆分成操作系统能理解的简单形式, 以达到跨界对象访问的目的. 在J2EE中,采用RMI的方式, 可以通过序列化传递对象. 在Android中, 则采用AIDL的方式. 理论上AIDL可以传递Bundle,实际上做起来却比较麻烦.AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在
阅读全文
摘要:在之前的博客中已经非常详细的介绍了Redis的各种操作命令、运行机制和服务器初始化参数配置。本篇博客是该系列博客中的最后一篇,在这里将给出基于Redis客户端组件访问并操作Redis服务器的代码示例。然而需要说明的是,由于Redis官方并未提供基于C接口的Windows平台客户端,因此下面的示例仅可运行于Linux/Unix平台。但是对于使用其它编程语言的开发者而言,如C#和Java,Redis则提供了针对这些语言的客户端组件,通过该方式,同样可以达到基于Windows平台与Redis服务器进行各种交互的目的。 该篇博客中使用的客户端来自于Redis官方网站,是Redis推荐的基于C接口的客户
阅读全文
摘要:自从Redis 2.2之后,很多数据类型都可以通过特殊编码的方式来进行存储空间的优化。其中,Hash、List和由Integer组成的Sets都可以通过该方式来优化存储结构,以便占用更少的空间,在有些情况下,可以省去9/10的空间。 这些特殊编码对于Redis的使用而言是完全透明的,事实上,它只是CPU和内存之间的一个交易而言。如果内存使用率方面高一些,那么在操作数据时消耗的CPU自然要多一些,反之亦然。在Redis中提供了一组配置参数用于设置与特殊编码相关的各种阈值,如: #如果Hash中字段的数量小于参数值,Redis将对该Key的Hash Value采用特殊编码。 hash-max-zi
阅读全文
摘要:一、请求应答协议和RTT: Redis是一种典型的基于C/S模型的TCP服务器。在客户端与服务器的通讯过程中,通常都是客户端率先发起请求,服务器在接收到请求后执行相应的任务,最后再将获取的数据或处理结果以应答的方式发送给客户端。在此过程中,客户端都会以阻塞的方式等待服务器返回的结果。见如下命令序列: Client: INCR X Server: 1 Client: INCR X Server: 2 Client: INCR X Server: 3 Client: INCR X Server: 4 在每一对请求与应答的过程中,我们都不得不承受网络传输所带来的额外开销。我们通常将这种开销称为RTT
阅读全文
摘要:一、概述: Redis在设计之初就被定义为长时间不间断运行的服务进程,因此大多数系统配置参数都可以在不重新启动进程的情况下立即生效。即便是将当前的持久化模式从AOF切换到RDB也无需重启。 在Redis中,提供了一组和服务器管理相关的命令,其中就包含和参数设置有关的CONFIG SET/GET command。二、相关命令列表:命令原型时间复杂度命令描述返回值CONFIG GET parameter主要用于读取服务器的运行时参数,但是并不是所有的配置参数都可以通过该命令进行读取。其中该命令的参数接受glob风格的模式匹配规则,因此如果参数中包含模式元字符,那么所有匹配的参数都将以key/val
阅读全文
摘要:一、简介: 和大多NoSQL数据库一样,Redis同样遵循了Key/Value数据存储模型。在有些情况下,Redis会将Keys/Values保存在内存中以提高数据查询和数据修改的效率,然而这样的做法并非总是很好的选择。鉴于此,我们可以将之进一步优化,即尽量在内存中只保留Keys的数据,这样可以保证数据检索的效率,而Values数据在很少使用的时候则可以被换出到磁盘。 在实际的应用中,大约只有10%的Keys属于相对比较常用的键,这样Redis就可以通过虚存将其余不常用的Keys和Values换出到磁盘上,而一旦这些被换出的Keys或Values需要被读取时,Redis则将其再次读回到主内存中
阅读全文
摘要:一、Redis提供了哪些持久化机制: 1). RDB持久化: 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2). AOF持久化: 该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。 3). 无持久化: 我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了。 4). 同时应用AOF和RDB。 二、RDB机制的优势和劣势: RDB存在哪些优势呢? 1). 一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这.
阅读全文
摘要:一、Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了。相信在阅读完这篇Blog之后你也可以轻松做到。这里我们还是先列出一些理论性的知识,后面给出实际操作的案例。 下面的列表清楚的解释了Redis Replication的特点和优势。 1). 同一个Master可以同步多个Slaves。 2). Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。 3). Master Server是以非阻塞的方式为Slaves提供服
阅读全文
摘要:一、概述: 和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制。在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事务的基石。相信对有关系型数据库开发经验的开发者而言这一概念并不陌生,即便如此,我们还是会简要的列出Redis中事务的实现特征: 1). 在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其它客户端的请求提供任何服务,从而保证了事物中的所有命令被原子的执行。 2). 和关系型数据库中的事务相比,在Redis事务中如果有某一条命令执行失败,其后的命令仍然会被继续执行。 3). 我们可以通过MULT...
阅读全文
摘要:一、概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String、List、Set、Hashes和Sorted-Set。这些命令都具有一个共同点,即所有的操作都是针对与Key关联的Value的。而该篇博客将主要讲述与Key相关的Redis命令。学习这些命令对于学习Redis是非常重要的基础,也是能够充分挖掘Redis潜力的利器。 在该篇博客中,我们将一如既往的给出所有相关命令的明细列表和典型示例,以便于我们现在的学习和今后的查阅。二、相关命令列表:命令原型时间复杂度命令描述返回值KEYS patternO(N) 时间复杂度中的N表示数据库中Key的数量。获取所有匹
阅读全文
摘要:一、概述: Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。 在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。事实
阅读全文
摘要:一、概述: 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。 和List类型不同的是,Set集合中不允许出现重复的元素,这一点和C++标准库中的set容器是完全相同的。换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、int..
阅读全文
摘要:一、概述: 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。二、相关命令列表:命令原型时间复杂度命令描述返回值HSET key field valueO(1)为指定的Key设定Field/Value对,如果Key不存在,该命令将创建新Key以参数中的Field/Value对,如果参数中的Field在该Key中已经存在,则用新值.
阅读全文
摘要:一、概述: 在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。 从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。相信对..
阅读全文
摘要:一、概述: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。二、相关命令列表:命令原型时间复杂度命令描述返回值APPEND key valueO(1)如果该Key已经存在,APPEND命令将参数Value的数据追加到已存在Value的末尾。如果该Key不存在,APPEND命令将会创建一个新的Key/Value。追加后Value的长度。DECR key O(1)将指定Key的Value原子性的递减1。如果该Ke.
阅读全文
摘要:一、简介: 在过去的几年中,NoSQL数据库一度成为高并发、海量数据存储解决方案的代名词,与之相应的产品也呈现出雨后春笋般的生机。然而在众多产品中能够脱颖而出的却屈指可数,如Redis、MongoDB、BerkeleyDB和CouchDB等。由于每种产品所拥有的特征不同,因此它们的应用场景也存在着一定的差异,下面仅给出简单的说明: 1). BerkeleyDB是一种极为流行的开源嵌入式数据库,在更多情况下可用于存储引擎,比如BerkeleyDB在被Oracle收购之前曾作为MySQL的存储引擎,由此可以预见,该产品拥有极好的并发伸缩性,支持事务及嵌套事务,海量数据存储等重要特征,在用于存...
阅读全文
摘要:/** *判断当前应用程序处于前台还是后台 * * @param context * @return */ public static boolean isApplicationBroughtToBackground(final Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentNam...
阅读全文