任何问题请联系WX:uu16853

买模板送网站采集器 让你轻松放开双手运营网站!

购买更多有优惠!

TextUtils类-Android字符串处理类 Android开发技术

  对于字符串处理Android为我们提供了一个简单实用的TextUtils类,如果处理比较简单的内容不用去思考正则表达式不妨试试这个在android.text.TextUtils的类,主要的功能如下:   是否为空字符 static boolean  isEmpty(CharSequence str)   拆分字符串  public static String[] split (String text, String expression) ,Android开发网提示大家仔细看例子如下 String.split() returns [”] when the string to be split is empty. This returns []. This does not remove any empty strings from the result. For example split("a,", "," ) returns {"a", ""}.  拆分字符串使用正则 public static String[] split […]

Android堆内存也可自己定义大小 Android开发技术

  对于一些大型Android项目或游戏来说在算法处理上没有问题外,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了上次Android开发网提到的 优化Dalvik虚拟机的堆内存分配 外,我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的dalvik.system.VMRuntime类来设置最小堆内存为例:   private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;   VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理,我们将在下次提到具体应用。

Android Button按钮控件美化方法 Android开发技术

  对于Android自带的Button按钮控件很多网友感觉不是很美观,如果界面上按钮不多,我们可以通过一种简单的方法实现Button脱胎换骨的外观,考虑到效率Android的layout方式的xml文件先不用了,毕竟控件不多模拟一个个性化Button还是很简单的,我们直接通过图片实现颜色的,代码如下:     private Button mBtn; //定义我们的按钮     在onCreate中加入       mBtn = (Button) findViewById(R.id.btn); //btn为layout中的Button ID       mBtn.setOnTouchListener(new OnTouchListener()        {          public boolean onTouch(View arg0,MotionEvent arg1)          {           if(arg1.getAction() == MotionEvent.ACTION_DOWN)            {            arg0.setBackgroundResource(R.drawable.pressed); //按下的图片对应pressed           }           else if(arg1.getAction() == MotionEvent.ACTION_UP)           {            arg0.setBackgroundResource(R.drawable.normal); //常态下的图片对应normal           }            else if()  […]

让你的Android程序兼容多种分辨率 Android开发技术

   随着Android机型的不断增多,从默认HVGA 320×480 到 WVGA  480×800 、FWVGA 480×854 以及QVGA的240×320,如果要保证这些机型的正常显示,可能涉及到图片资源单独设计,虽然有朋友考虑使用9patch方法可以解决拉伸,但是我们要考虑如果一个主程序的背景图片,可能原来为480×800的Nexus One上正常运行,但是到了HTC Tattoo的240×320,可以想想是什么样子。Android开发网提示大家对于Android 2.0而言资源要单独考虑,不然无法正常被加载。如下图很多都加了v6的字样。   我们将对上面的文件夹命名方式做详细的解释: drawable-hdpi 这个hdpi代表high dpi,一般为 WVGA或 FWVGA分辨率的图片,如480×800,而mdpi 代表 mid dpi,一般为HVGA,如320×480。而 ldpi为 low dpi,一般为QVGA,如240×320。而下面layout中的land代表横屏时的布局。但是有些网友可能发现了 -v6的字样android123提示这是 Android 2.0开始出现一些bug的解决方法。 -v6是专门为2.0固件的机型设计的。 v6代表 API Level 6

判断Android文件名是否安全技巧 Android开发技术

  有时候我们在处理用户输入的文件名时需要多加小心,对于Android文件名来说可以使用Java自带的正则表达式库轻松判断,Android123给出大家两种重载方式以方便不同的场合。这两个方法可以直接静态调用,传入完整路径或文件名均可。    public static boolean IsFileNameOK(String filepath) {        return Pattern.compile("[\\w%+,./=_-]+").matcher(filepath).matches();    }    public static boolean IsFileNameOK(File file) {        return Pattern.compile("[\\w%+,./=_-]+").matcher(file.getPath()).matches();    }  

Android高性能文件类MemoryFile Android开发技术

  很多网友抱怨Android处理底层I/O性能不是很理想,如果不想使用NDK则可以通过MemoryFile类实现高性能的文件读写操作。MemoryFile顾名思义就是内存文件的意思,如果你过去从事过Win32开发,那么它的原理就是MapViewOfFile(),当然开发过Linux的网友可能很快就联想到了mmap(),是的该类就是他们的托管代码层封装,位于android.os.MemoryFile这个位置,从Android 1.0开始就被支持。   MemoryFile适用于哪些地方呢?   对于I/O需要频繁操作的,主要是和外部存储相关的I/O操作,MemoryFile通过将 NAND或SD卡上的文件,分段映射到内存中进行修改处理,这样就用高速的RAM代替了ROM或SD卡,性能自然提高不少,对于Android手机而言同时还减少了电量消耗。Android123提示网友该类实现的功能不是很多,直接从Object上继承,通过JNI的方式直接在C底层执行。  主要的构造方法 MemoryFile(String name, int length) ,这里第二个参数为文件大小,需要说明的是Android的MemoryFile和传统的mmap还有一点点区别,毕竟是手机,它内部的内存管理方式ashmem会从内核中回收资源。毕竟目前部分低端机型的RAM也比较吃紧。  synchronized boolean  allowPurging(boolean allowPurging)  //允许ashmem清理内存,线程安全同步的方式。 void  close() //关闭,因为在Linux内部mmap占用一个句柄,不用时一定要释放了 InputStream  getInputStream()  返回读取的内容用Java层的InputStream保存 OutputStream  getOutputStream()  把一个OutputSream写入到MemoryFile中 boolean  isPurgingAllowed() //判断是否允许清理 int  length()  //返回内存映射文件大小 下面就是我们熟悉的,读写细节,主要是对字符数组的操作,这里大家要计算好每个文件类型的占用,同时考虑到效率对于自己分配的大小考虑粒度对齐。 int  readBytes(byte[] buffer, int srcOffset, int destOffset, int count)  void  writeBytes(byte[] buffer, int srcOffset, int destOffset, int count)     具体的实际应用,Android开发网将在下次和大家讲到。

JSONObject在Android上的应用 Android开发技术

  如果你过去开发过AJAX应用,相信对JSONObject不会陌生吧,作为基于JavaScript的数据交换格式,可以直接代替Xml,这里Android从1.0开始就完全支持JSONObject。在平时应用中直接引入import org.json.JSONObject;即可方便使用。当然同类的还有SOAP。   在常规使用方便JSONObject对象可以实现类似Bundle或Parcel可以封装数据,代替一个XML的ITEM,但最大的优势是可以执行一些简单的方法,比如说getString、has、put、getBoolean、getInt等数据类型的存取操作。Android123提示大家对于常规的项目开发,今天本文不考虑Server端的布局,在Android平台上处理这些比较简单,主要是一些http的请求处理。可以直接引入import org.apache.http.xxx来实现web server层的数据交换,如果你没有专业的Server开发技术,可以通过简单的Web配合JSON方式快速实现自己的交互式应用。  

Android的Activity你知多少呢? Android开发技术

   看到这个标题很多网友肯定回答,我知道Activity是Android上的窗口基类,了解Activity的生命周期比如onCreate onStop等,呵呵,按照这样说Android123还知道Activity的实现其实是从ApplicationContext,而ApplicationContext是从Context这个抽象类派生而来的,当然我们看到显示的是View或者ViewGroup,当然今天说的不是这些东西,而是很多网友来问的Android为什么不设计一个任务管理器,当然从Android 1.5开始ActivityManager类提供了restartPackage可以关闭一个程序,需要加上<uses-permission android:name="android.permission.RESTART_PACKAGES"/>这个权限,不过我们注意到,长按Home键可以看到以前程序的运行,同时可以快速的切换回来。这就是Android独有的程序生命周期管理机制 Activity历史栈。   我们在一个普通的程序主窗口A中打开了一个窗口B,而窗口B打开了窗口C,但是按下Back键后结果出乎了预期,是的这就是Activity的history stack的原因,在数据结构中栈是FIFO的,阻止我们不愿意看的情况的发生则可以在打开新Activity时加上标记FLAG_ACTIVITY_NO_HISTORY,代码如下:     Intent i= new Intent(this, cwj.class);       i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);   //Android开发网提示大家相关的还有Intent.FLAG_ACTIVITY_CLEAR_TOP,都试试    startActivity(i);    当然更多的程序Activity控制可以再androidmanifest.xml中定义。

Android游戏开发性能改进要点 Android开发技术

  目前来说Android平台在整体性能上表现不错,大多数调用都是Dalvik API通过JNI到底层了,但是在游戏性能方面和iPhone的Objective-C有着较大的差距,最新发现有如下的改进:   1. 首先内存方面,可以参考 Android堆内存也可自己定义大小 和 优化Dalvik虚拟机的堆内存分配   2. 基础类型上,因为Java没有实际的指针,在敏感运算方面还是要借助NDK来完成。Android123提示游戏开发者,这点比较有意思的是Google推出NDK可能是帮助游戏开发人员,比如OpenGL ES的支持有明显的改观,本地代码操作图形界面是很必要的。   3. 图形对象优化,这里要说的是Android上的Bitmap对象销毁,可以借助recycle()方法显示让GC回收一个Bitmap对象,通常对一个不用的Bitmap可以使用下面的方式,如   if(bitmapObject.isRecycled()==false) //如果没有回收           bitmapObject.recycle();      4. 目前系统对动画支持比较弱智对于常规应用的补间过渡效果可以,但是对于游戏而言一般的美工可能习惯了GIF方式的统一处理,目前Android系统仅能预览GIF的第一帧,可以借助J2ME中通过线程和自己写解析器的方式来读取GIF89格式的资源。   5. 对于大多数Android手机没有过多的物理按键可能我们需要想象下了做好手势识别 GestureDetector 和重力感应来实现操控。通常我们还要考虑误操作问题的降噪处理。    

Splash Screen开场屏在Android中的实现 Android开发技术

   很多网友可能发现近期Tencent推出的手机QQ Android版包含了一个开场屏Splash Screen载入效果,通常游戏或大型软件打开时可能需要一个释放解析资源的过程,需要一个前台的动画播放和后台的逻辑处理线程配合,当然对于简单的软件也可以加一个Splash Screen作为美化。在Android平台上如何实现呢?   首先创建一个Activirty,在SetContentView时直接通过ImageView创建一个全屏的图片,Android123提示大家还要考虑好分辨率和当前设备一致,onCreate添加代码如下:   new Handler().postDelayed(new Runnable(){   // 为了减少代码使用匿名Handler创建一个延时的调用            public void run() {                   Intent i = new Intent(SplashScreen.this, Main.class);    //通过Intent打开最终真正的主界面Main这个Activity                SplashScreen.this.startActivity(i);    //启动Main界面                SplashScreen.this.finish();    //关闭自己这个开场屏            }           }, 5000);   //5秒,够用了吧

不会Java或C,Android123告诉你还有选择 Android开发技术

  随着Google Android平台的逐渐开放,很多过去并不是开发Java或C的网友也想涉及,今天Android123高速你新的开发方法。今天抛开Dalvik VM的Java和NDK的C/C++,那么还有什么方法来实现自己的软件呢?     1. Flash Action Script ,对于学过Flash脚本的网友未来可以尝试通过Adobe Open Screen方法通过Flash实现界面UI,可能对于游戏开发来说是一项迈进,从Android 2.1到以后基本上都会支持Flash播放插件。   2. JavaScript+HTML+CSS,这个可能是W3C的Widget开发方式,Web程序员可以简单的通过Html+CSS实现布局,通过JavaScript实现逻辑,或者AJAX方式实现网络访问等等,软件从webkit浏览器直接加载运行。   3. Web网页游戏,现在很多浏览器都可以打网游,这归功于Adobe Flash Player强大的标示和逻辑处理能力,这样的好处显而易见就是块平台方便,用户可以在PC上娱乐,如果网速足够理想在地铁上也可以使用 Android手机浏览器来打网游,怎么样其实想想还是有很多种选择的。

GestureDetector手势识别类 – 入门篇 Android开发技术

  对于Android设备来说最主要的操作方式为触控,作为一个Android开发者来说深入了解 GestureDetector 手势识别是很有必要的,Android123今天主要介绍下该类相关的方法,以及简单的手势识别。   通常我们构造GestureDetector类时设置一个GestureDetector.OnGestureListener对象来实时监控用户的操作,OnGestureListener对象提供一些常见手势的重写方法。     @Override      public boolean onDown(MotionEvent e) {         //按下事件         return true;       }             @Override      public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {        //快速滚动         return true;       }             @Override      public void onLongPress(MotionEvent e) {           //长按     }             @Override      public […]

Android平台XML解析库功能不完整 Android开发技术

  很多网友可能发现Android平台上XML解析库包含了主流的Dom、SAX以及XmlPull方式,如果为了跨平台数据库保存可能不使用SQLite的话,可能XML实现最好,但是可笑的事情发生了。Android上面解析库不可以保存解析结果,这点比J2ME的KXml还简陋,真不知道Google这帮家伙如何搞的。   Android123提示大家,对于简单的XML文件创建可以使用XmlSerializer,而常规不做XML解析即Parser的话,还是使用Dom来操作每个元素,这里面我们不考虑XPath实现查找的复杂应用,但是Dom竟然无法返回整个树的字符串结果相当意外也没有transformer或输出流的相关方法,这点可以看到就不存在javax.xml.transform.的实现。目前没有很好的解决方法,如果不考虑引入第三方的完整的xml解析库jar文件。可以考虑移植一个高效轻量级的xml解析库用NDK比较有效。  

获取Android屏幕方向及键盘状态 Android开发技术

     很多开发Android的网友可能需要判断当前的屏幕方向或键盘状态,下面的代码可以判断出横屏landscape和常规的portrait纵握方式,如果使用的是G1这样有QWERTY键盘硬件的,还可以判断屏幕方向以及键盘的拉出状态。 Configuration config = getResources().getConfiguration();       if (config.orientation == Configuration.ORIENTATION_LANDSCAPE){               //横屏,比如 480×320     }else if(config.orientation == Configuration.ORIENTATION_PORTRAIT){               //竖屏 ,标准模式 320×480     }else if(config.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_NO){               //横屏,Android123提示物理键盘滑出了     }else if(config.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES){               //竖屏,键盘隐藏了       } 

自定义Android标题栏TitleBar布局 Android开发技术

很多网友发现自己Android程序的标题栏TitleBar区域很单调,如果想个性化一些可以通过下面的方法来为自己软件的标题定制一个layout布局文件,比如浏览器的标题栏,它包含了网站的Favicon,自定义的进度条,和不确定的进度指示等等,实现的方法自己控制吧。下面代码在onCreate中使用,同时顺序不要改变,Android123提示各位开发者否则将无法生效:     requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);       setContentView(R.layout.main);   //软件activity的布局    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);  //titlebar为自己标题栏的布局

测试Android软件性能主要方法 Android开发技术

    对于Android平台上软件的性能测试可以通过以下几种方法来分析效率瓶颈,目前Google在Android软件开发过程中已经引入了多种测试工具包,比如Unit测试工程,调试类,还有模拟器的Dev Tools都可以直接反应执行性能。    1. 在模拟器上的Dev Tools可以激活屏幕显示当前的FPS,CPU使用率,可以帮助我们测试一些3D图形界面的性能。    2.  一般涉及到网络应用的程序,在效率上和网速有很多关系,这里需要多次的调试才能实际了解。    3. 对于逻辑算法的效率执行,我们使用Android上最普遍的,计算执行时间来查看:       long start = System.currentTimeMillis();      //android开发网提示这里做实际的处理do something      long duration = System.currentTimeMillis() – start;       最终duration保存着实际处理该方法需要的毫秒数。这里类似Win32上的GetTickCount,在Win 32和Symbian上都提供了高精度的性能计数器和低阶计时器,这里在Dalvik VM上的Java层这种方法对于一般的应用足以。    4. GC效率跟踪,如果你执行的应用比较简单,可以在DDMS中查看下Logcat的VM释放内存情况,大概模拟下那些地方可以缓存数据或改进算法的。    5. 线程的使用和同步,Android平台上给我们提供了丰富的多任务同步方法,但在深层上并没有过多的比如自旋锁等高级应用,不过对于Service和appWidget而言,他们实际的产品中都应该以多线程的方式处理,以释放CPU时间,对于线程和堆内存的查看这些都可以在DDMS中看到。    更多的调试和性能测试方法Android123将在以后的内容中出现。

Android全屏设置代码 Android开发技术

 如果你在开发游戏或一个主题风格很特别的应用可能需要全屏显示,在Android中全屏窗口的代码很简单,主要分为两个步骤和一个注意点:    requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //设置全屏   不过Android123提醒各位开发者注意的是这些调用要放在SetContentView前面,否则无法生效或结果有出入。

Android布局Java代码构造法 Android开发技术

    一般情况下对于Android程序布局我们往往使用XML文件来编写,这样可以提高开发效率,但是考虑到代码的安全性以及执行效率,可以通过Java代码执行创建,虽然Android编译过的xml是二进制的,但是加载xml解析器的效率对于资源占用还是比较大的,一般一个简单的TextView,比如     <TextView    android:id="@+id/textControl "    android:layout_width="100px"    android:layout_height="wrap_content" />    可以等价于下面的Java代码:    LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(100, LayoutParams.WRAP_CONTENT); //宽度为100px,高为自适应最小的高度    // setOrientation(VERTICAL); 设置布局为垂直    TextView textControl = new TextView(this);//如果从一个XXXLayout.,比如LinearLayout为View的基类时这里this应该换成为创建改类的Context   textControl.setText("Android开发网欢迎您");   addView( textControl, textParams );    当然Java处理效率比XML快得多,但是对于一个复杂界面的编写,可能需要一些套嵌考虑,如果你思维灵活的话,使用Java代码来布局你的Android应用程序是一个更好的方法。

EditText输入提示你知道吗? Android开发技术

  对于EditText控件来说可能需要用户输入提示,Android123给大家一个不错的方法,比如这个文本库是需要输入姓名的,可能 输入提示的内容为 “单击输入姓名”,使用Java代码,直接调用setHint(CharSequence hint) 即可,而对于layout xml布局文件而言,可以加入android:hint="单击输入姓名"   这行在你的 EditText 中即可。    Android开发网提示: 输入提示颜色为灰色的,用户单击后自动清除,一般作用是告诉用户这个文本框需要输入的内容是什么。

MenuInflater Android菜单从xml创建方法 Android开发技术

   对于Android开发我们可以做的尽量MVC化,UI界面和Code逻辑代码分离方式,除了常规的Activity布局可以用xml实现外,菜单Menu也可以通过MenuInflater来映射一个布局文件,相关的创建菜单方法有些不同,如图:  @Override    protected void onCreateContextMenu(ContextMenu menu) {        MenuInflater inflater = cwj.getMenuInflater(); //这里cwj为当前的context        inflater.inflate(R.menu.android123, menu); //使用android123.xml文件作为菜单布局    }    接下来,我们创建相应的文件,路径为 /res/menu/android123.xml   具体内容如下,注意Item3可以禁用某项,同时加入相关的图片以及快捷键大家可以参考SDK实现更完整的方法。 <menu xmlns:android="http://schemas.android.com/apk/res/android">    <item android:id="@+id/item1_id"        android:title="@string/text1"/>    <item android:id="@+id/item2_id"        android:title="@string/text2"/>     <item android:id="@+id/item3_id"        android:title="@string/text3"       android:enabled="false" /> </menu>   本文可以帮助我们深入的定制一些界面,相关的TitleBar自定义可以参考 自定义Android标题栏TitleBar布局 

Use Sinaapp Lib:使用新浪云计算 CDN 给 jQuery 加速

我前面介绍过 Google Hosted Libraries:它把一些常用的的 JavaScript 库放到 Google 的服务器上,这样就可以充分利用 Google 的服务器资源,节省自己的网络带宽。其实国内新浪云计算平台 Sinaapp 也提供了这些库:http://lib.sinaapp.com/。 为了方便 WordPress 博客使用,我就开发了对应的 WordPress 插件:Use Sinaapp Lib,把 WordPress 中的 JavaScript 库用 Sinaapp Lib 来替代,达到节省带宽和加速的目的。目前这个插件支持以下的库: jquery jquery-ui backbone underscore json2 swfobject 另外需要特别注意的是,这个插件使用的 jQuery 库是最新的 1.9 版本,会有一些兼容性的问题。 插件使用非常简单,只需要上传激活即可,原来使用 wp_enqueue_scripts 方式调用 jQuery 的插件无需做任何更改即可继续使用。 下载:use-sinaapp-lib.zip 标签:CDN WordPress 插件

WPJAM 问答:新的 WordPress 问答网站

经常有人在博客上给我留言问我问题,或者直接加我 QQ 问我问题,基本上都是 WordPress 相关的问题,但是实在时间和精力有限,我们没办法全部回答,并且博客上的留言散落在各篇文章,QQ上回答了,其他有同样问题的用户也看不到,所以我决定做一个 WordPress 相关的问答网站,因为前段时间把博客迁移到 wpjam.com 平台上,所以我决定这个问答系统就叫做 WPJAM 问答。 WPJAM 问答系统链接是:http://bbs.wpjam.com/,虽然使用的二级域名中带有 bbs,但是其实还是使用 WordPress 构建的,但是我做了以下几方面的优化: 首先,这个系统无需用户登陆,但是又不想让用户手工输入自己的个人信息,所以我使用了多说的一些 JavaScript 接口,就是如果用户已经登录了多说这个社会化留言系统,WPJAM 问答系统就会默认自动获取你在多说中的信息,并直接和问题的标题和内容一起提交。如果没有登陆多说,那你也只能自己输入名字和邮箱,以便以后通过邮件获取问题的答案了。 然后,为了让用户尽快收到答案,在有人回答了用户的问题之后,系统会自动发一封邮件告诉用户,你的问题已经有人回答了,但是为了防止骚扰,只有第一次回复的时候才会发邮件,因为如果还没有解决用户的问题,用户可以通过多说继续留言和收到回复。 我们知道这样的面对用户的问答系统 HTML 标签是允许很少的,WPJAM问答系统更是所有的 HTML 标签都不支持,但是因为主要面对 WordPress 的问题,所以一定是要允许输入代码的,这个时候怎么办?只需要把代码放到 [code] 和 [/code] 中,就能正确把代码贴入,并且无需当心代码被过滤掉。如果代码还不能描述清楚你的问题,还可以在 [img] 和 [/img] 中贴上截图的链接来进一步描述问题。 <!– 集成在 WordPress 后台,这个是我认为这个问答系统最好的地方,我已经制作了一个 WordPress 插件(还在最后测试,很快发布),让你直接在 WordPress 后台直接提问和收到回复。 –> 不过为了防止垃圾留言,第一提问是需要审核的,之后就不需要了,并且不要发布的太多太快,好吧,你如果有什么 WordPress 问题没办法解决,就来提问吧:http://bbs.wpjam.com/。

如何从 Akismet 黑名单中逃生

不幸的事情总会发生,不知道哪个缺心眼的家伙竟然把我的域名搞到 Akismet 的黑名单了。这样的结果是灾难性,这样我到哪里留言都徽不成功了,直接被判断为垃圾留言,虽然我不太留言。 这个时候怎么办?办法总是有的。就是到 Akismet 的 Contact 页面联系他,告诉他你被 Akismet 误判了,能不能帮忙从黑名单中删除?因为对方是美国人,只能看得懂英文文,如果你英文不够好,你可以使用下面这段英文: My comments get caught by akismet by mistake. What can I do to make akismet identify my comments on others’ blogs as non-spams? 然后等上三四天,你就会收到对方的来信,告诉你他已经帮你从黑名单中删除,你测试下还有没有问题,有问题去再次联系他,回邮件就行了。 标签:Akismet SPAM

GestureDetector手势识别类 – 进阶篇 Android开发技术

  上次我们提供了一个基本的框架可以实现Android平台上的手势操作,借助GestureDetector类可以轻松实现,详细查看 GestureDetector手势识别类 – 入门篇 本次结合网友总结的内容一起来探讨下具体的应用。    首先上次Android123写的较为简单,如果网友不太明白可以看看更具体些的内容:   boolean  onDoubleTap(MotionEvent e)解释:双击的第二下Touch down时触发boolean  onDoubleTapEvent(MotionEvent e)解释:双击的第二下Touch down和up都会触发,可用e.getAction()区分。boolean  onDown(MotionEvent e)解释:Touch down时触发boolean  onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)解释:Touch了滑动一点距离后,up时触发。void  onLongPress(MotionEvent e)解释:Touch了不移动一直Touch down时触发boolean  onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)解释:Touch了滑动时触发。void  onShowPress(MotionEvent e)解释:Touch了还没有滑动时触发(与onDown,onLongPress比较onDown只要Touch down一定立刻触发。而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。所以Touchdown后一直不滑动,onDown->onShowPress->onLongPress这个顺序触发。 boolean  onSingleTapConfirmed(MotionEvent e)boolean  onSingleTapUp(MotionEvent e)解释:上面这两个函数都是在touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。 点击一下非常快的(不滑动)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed 点击一下稍微慢点的(不滑动)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed 有了这么多的响应方式,我们能更加方便的对用户的触摸操作进行响应,对各种动作都有所对应。那么这个类如何使用呢,其实非常简单,在view的新建一个GestureDetector的对象。构造函数里gestureDetector = new GestureDetector(new SelfGestureDetectorListener()); 然后在View的onTouchEvent里以下这样用,就可以在gestureDetector的事件里写自己的代码了。@Overridepublic boolean […]

Android平台受专利影响 Android开发技术

  目前Android平台部分东西受微软专利影响,导致HTC每出一部Google手机将会付出20~40美元不等的专利费用,价格问题主要是涉及专利数量的多少决定。不过我们看到Android在开源方面有很多东西可以利用到,同时对于各个厂商的支持都比较好,比如Adobe Flash的兼容,不过我们更期待PDF Reader也应该加入进去更好些。   微软目前持有专利可能是比较稳固的,但是IBM和Apple的创新能力确实提高了不少,而Google在非IT行业的投入也是相当大的,目前来看软件巨人开始玩专利游戏了,当然大多数Linux侵犯Windows专利。   Android手机目前售价相对较高主要原因在于研发成本上,目前Motorola的设备在硬件方面成本不是很高,但是人力方面可谓是下足功夫,Moto的Blur界面看上去不像是Android,但是Motorola已经不是北美最大的手机制造商了,这一位置逐渐被iPhone代替,同时Motorola财报智能手机终端部门仍然亏损状态。

Android的ListView控件滚动时背景问题 Android开发技术

  如果大家在非黑色背景下使用ListView控件时,Android默认可能在滚动ListView时这个列表控件的背景突然变成黑色。这样可能导致程序的黑色的背景和主程序的主题既不协调。解决的方法Google在设计Android时也考虑了,在Layout的ListView中加入android:cacheColorHint="#00000000" 的属性即可。

Android开发需要自己完善的类库总结 Android开发技术

  经历了目前最新的Android 2.1包括2.2透露出的特性来看,目前Android开发在实际项目中仍然存在很多问题。这里我们主要列举下开源中有哪些主要问题:   1. xml解析,虽然Android自带了XmlPull、Dom、SAX解析器,但是对于XML修改后的保存来看仍然不够完善,当做解析器获取数据可以,如果作为数据双向交换,考虑到自己实现来看,可以考虑JSON解决或挂载Dom4j库。  2. zip处理,对于压缩文件处理,Android平台底层支持zlib库,但是可以看到底层写死仅支持utf8编码的文件名,如果文件名是日文或中文如果自己不重新编译zlib底层,还是考虑使用apache ant库提供的方法,当然对于zip密码而言仍然不被支持。   3. gif动画,目前我们可能会发现很多手机不支持Gif动画的播放,仅仅显示开头一帧,当然GIF的原理就是开一个线程轮询播放每一帧,可能考虑到平台的性能或电池功耗,在CPU没有到1.5GHz时代时可能不会被加入吧。这可能也是直到Android 2.2才加入Flash的原因。   当然还有很多底层库都存在对宽字节和编码问题,而大多数对于标准的处理仅仅兼容utf8这样的,对于unicode的兼容度不够,可能造成部分地方为乱码,比如早期Android平台对于短信无法发送中文这样的BUG。

Android上HTTP协议通讯状态获取 Android开发技术

  通常情况下轻量级的Http传输Android平台可以直接使用Sun Java的HttpURLConnection类方法处理,比如果自己定义一次请求header可以通过setRequestProperty设置,而我们需要获取的Http Web Server状态可以通过HttpURLConnection.getResponseCode() 的方法获取。   当然Http协议返回值常见的有 200 为成功,400为请求错误,404为未找到,500为服务器内部错误,403无权查看,302为重定向等等。   对于Android平台提供更完善的Apache类有HttpClient 、HttpPost、HttpResponse、HttpGet和HttpEntity,其中对于数据报头header构造通过HttpEntity,而返回状态值可以通过HttpResponse获取。   有关Android客户端和Server通讯类相关的开发我们将会在以后文章中做大量实例介绍。      

PermissionInfo Android权限枚举方法 Android开发技术

  随着Android应用的不断增多,虽然Google一直不断的限制应用的底层执行力但是安全仍然存在问题,Android123作为开发杀毒软件出身的团队讲述下一般应用的安全可靠性问题。一般通过PackageManager的getPackageInfo获取该应用的PackageInfo信息来获取该程序的权限。   目前Android开发时相关的Permission定义在androidmanifest.xml中,PackageInfo类的permissions属性可以返回一个PermissionInfo[]的数组,这里可以详细处理安全问题,而常规的描述可以通过requestedPermissions属性返回的String[]数组来获取。  

ArrayList LinkedList Set HashMap介绍 Android开发技术

  在Android开发中我们经常需要对数据进行分类和操作,对于轻量级的数据存储我们可能不需要动用SQLite或效率以及类库不完善的XML,由于SharedPreferences不具备数据枚举方法,如果仅仅是一个String或Int数组可以通过一个标记分割设计外,我们还是主要来看看Android或者说Java提供的基础数据类型辅助类ArrayList LinkedList Set HashMap的介绍,如果你熟悉C++的STL或Boost库可以略过本文。    在Java中提供了Collection和Map接口。其中List和Set继承了Collection接口;同时用Vector、ArrayList、LinkedList三个类实现List接口,HashSet、TreeSet实现Set接口。直接有HashTable、HashMap、TreeMap实现Map接口。     Vector基于Array的List,性能也就不可能超越Array,并且Vector是“sychronized”的,这个也是Vector和ArrayList的唯一的区别。     ArrayList:同Vector一样是一个基于Array的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些。Android123提示大家适用于顺序性的查找     LinkedList:不同于前面两种List,它不是基于Array的,作为链表数据结构方式,所以不受Array性能的限制。当对LinkedList做添加,删除动作的时候只要更改nextNode的相关信息就可以实现了所以它适合于进行频繁进行插入和删除操作。这就是LinkedList的优势,当然对于元素的位置获取等方面就逊色很多。     List:         1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];         2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];         3. 所有的List中可以有null元素,例如[ tom,null,1 ];         4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。 虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。      HashSet:HashSet的存储方式是把HashMap中的Key作为Set的对应存储项,HashMap的key是不能有重复的。HashSet能快速定位一个元素,但是放到HashSet中的对象需要实现hashCode()方法0。     TreeSet:将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的。TreeSet不同于HashSet的根本是TreeSet是有序的。它是通过SortedMap来实现的。     Set总结: 1. Set实现的基础是Map(HashMap); 2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象,不能包含两个元素e1、e2(e1.equals(e2))。     Map是一种把键对象和值对象进行关联的容器,Map有两种比较常用的实现: HashTable、HashMap和TreeMap。     HashMap也用到了哈希码的算法,以便快速查找一个键,     TreeMap则是对键按序存放,因此它有一些扩展的方法,比如firstKey(),lastKey()等。     HashMap和Hashtable的区别。 […]

Android软件开发方向指导 Android开发技术

  目前Google Android平台可能算是第一阶段的成功,但是给开发者的感觉仍然是雷声大雨点小,利润方面和iPhone App Store还相差甚远,下面Android123主要谈下未来发展趋势以及更高的盈利方法。    1. Android目前精品游戏相当稀少,总体游戏数量和质量远远少于iPhone主要原因是设备的消费群体问题,如果你的技术够硬,数据结构算法过关的话沉着冷静开发一款像样的游戏可以带来不小的收获。   2. 界面技术单一,未来的趋势仍然是3D开发,目前手机CPU已经达到了GHz级别,同时GPU和硬件加速都已经有了雏形,视觉冲击将是未来的主要竞争力所以OpenGL一定要学习牢固,如果你的数学和物理不好有必要先补充下。   3. 本地语言开发,未来在一些核心处理上仍然需要借助NDK的支持Native C++可以在3D OpenGL ES上有很重要的用处,对于视频编码等方面这都是托管语言无法表达的问题。

ConditionVariable Android线程同步 Android开发技术

  ConditionVariable类位于android.os.ConditionVariable,它可以帮助Android线程同步。在SDK上的介绍ConditionVariable不同于标准Java位于java.lang.Object wait() 和 notify() ,这个类可以等待自己,这就意味着 open(), close() 和 block() 可能会假死 ,如果使用ConditionVariable类的open()在调用 block() 之前, block() 将不会阻塞,相反将会返回立即。    该类一共有4个方法    boolean  block(long timeout)   阻止当前线程知道条件是open,或直到超时,这里参数long timeout为超时设置,Android123提示大家如果你们从事过Win32开发,这个方法类似DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds); 函数。   void  block()   阻止当前线程知道条件 open ,是上面的无超时等待重载版本。   void  close()  重置条件为 close状态。  void  open() Open条件,释放所有线程的阻塞.   ConditionVariable在创建时还有一种构造方法是 public ConditionVariable (boolean state) ,如果为true,默认时为opened,如果为false则是closed. ,默认public ConditionVariable () 为close().

Android跨进程数据通讯-剪切板Clipboard Android开发技术

  在Android平台中每个常规的应用运行在自己的进程空间中,相对于Win32而言Android上之间的进程间传递主要有IPC、剪切板。当然今天我们说下最简单的ClipboardManager。使用剪切板可以直接实现数据的传输。整个实现比较简单,Android123提示注意剪切板中的类型判断。剪切板类位于android.text.ClipboardManager,导入时注意。   public void setClipboard(String text) {    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);    clipboard.setText(text);  }    public String getClipboard() {    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);    return clipboard.getText().toString();  }  有关剪切板的数据类型可以通过 该类的boolean  hasText() 方法判断。

100% Secure Checkout

PayPal / MasterCard / Visa