1.Bitmap如何保存成为一个bmp文件
很多网友可能发现了Android的Bitmap对象无法保存成为一个bmp文件,即提供的方法只有
compress(Bitmap.CompressFormat format, int quality, OutputStream stream)
,可以存为png和jpg,png可能还好说,但是jpg是有损压缩会降低图片的质量,其实
Google还提供了一个
API在Bitmap类,通过 copyPixelsToBuffer(Buffer dst) 这个方法来
解决,Buffer类型,和前几天我们说到的NIO中的ByteBuffer处理方式一样,需要说明的是java中的Buffer在内存中是连续成块的,同时底层有C++支持效率还是很高的。
通过copyPixelsToBuffer(Buffer dst) 方法将会返回一个RGB8888格式的DIB文件,DIB位图和设备无关,这里
教程之家提醒大家,如果想显示出位图,还需要将其加上位图的文件头才行。
2.ByteBuffer的flip,clear及rewind区别
近期不少网友表示Android的NIO中有关ByteBuffer的几种常用方法比如clear,rewind和flip到底有哪些区别。下面教程之家给大家这三种方法的
源码,方便大家记忆。
- public final Buffer clear() {
- position = 0; //设置为0
- limit = capacity; //极限和容量相同
- mark = -1; //取消标记
- return this;
- }
- public final Buffer rewind() {
- position = 0;
- mark = -1;
- return this;
- }
- public final Buffer flip() {
- limit = position;
- position = 0;
- mark = -1;
- return this;
- }
复制代码
从上面对比来看flip和rewind的区别就是flip会制定极限和位置相同,所以我们写
数据时不多不少正好,而clear则清空缓冲区。
3.Android都支持哪些Java特性
很多Java SE或EE的
程序员想转到Android
平台上进行
开发,对于Android平台上到底对Java支持有多少呢? 下面教程之家给大家总结下常规的支持:
目前来看JDK的高级特性均支持,比如说1. Java的反射、2.NIO (New I/O)、3. JNI (Java Native Interface)
相对而言 对于OpenGL和
SQLite的支持比较强大,但是AWT和JDBC这些东西都不支持。
在Xml
解析上,兼容DOM、XmlPull和SAX,同时数据交换格式上,Android虽然不支持LINQ但对于Java来说JSON同样支持。
对于Http处理方面,提供了轻量级的Http处理类,以及更完善的Apache库支持。
音频方面Android比较强大,使用了OpenCore库,很多地方我们可以自己编写编码、解码器进行扩展。
Android在文件
系统上基本山和Java是相同的,不过对于高效率的内存影射文件而言提供了
android.os.MemoryFile这个类。
总体而言,Java程序员转入Android开发只需要了解平台特有的,
Intent,
Service,Receiver和Activity就差不多了,深入了解下AIDL和UI
控件和自
定义Widget基本上可以胜任常规的工作。
4.EditText控件无法代码设置ReadOnly只读
有些网友可能发现Android的EditText控件有个设计bug,就是无法使用Java代码方式设置ReadOnly只读方式,但是
Android123提示大家通过xml代码可以设置 android:editable="false"
,相关的setEnabled方法这里不适用,同时android.text.Editable.Factory也无法设置可编辑,该类相关方法只有
static Editable.Factory getInstance() 和 Editable
newEditable(CharSequence source) 两个。
目前还没有很好的解决方法,EditText控件这种设计缺陷确实比较麻烦,教程之家给大家一个曲线的方法,通过父类
TextView的addTextChangedListener(TextWatcher watcher) 方法,设置一个listener监控文字修改后立即恢复原来的内容即可。
5.使用xml让你的Activity无标题方法
近期收到网友的邮件表示如何不在onCreate中设置无标题,其实方法比较简单,这里教程之家给大家一个简单的吧,在
androidmanifest.xml中找到需要设置的Activity,加一个属性内容为
android:theme="@android:style/Theme.NoTitleBar" 即可,比如说
这样子android123_cwj这个窗口在
运行时就没有标题了。是不是很简单,同时大家使用onCreate中的Java代码如何设置,注意一定要在setContent
View之前执行 requestWindowFeature(Window.FEATURE_NO_TITLE);这句,顺序不要搞颠倒,代码如下:
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.cwj)
复制代码
6.Android应用完全退出终极篇
很多网友不知道,Android应用如何完全退出,有的网友可能发现Android 2.2中即使使用了Google最新给出的Android
2.2新增API killBackgroundProcesses 方法也无法实现。在J2SE中我们可能使用System.exit(0);
退出,那么我们提到的5种常规方法都无法完全退出怎么办呢?
今天教程之家给大家介绍一种方法,制造异常退出。
1. 首先我们可以制造一个空指针的异常,比如TextView.setText方法中执行一个int型的内容,由于setText方法重载了
R.string.xxx这样的资源int型内容,但是我们没有声明这个资源,仅仅把String写成了int的值,就会产生一个异常,这时系统
Dalvik VM会直接关闭你的进程,这招十分有效,CWJ一般平时不公布给大家。
2. 但是有的网友说了,有Force Close的对话框怎么办,其实我们通过重写Android
应用程序的Application基类自己实现 Thread.UncaughtExceptionHandler接口的uncaughtException方法是可以避免出现FC窗口的,用户感觉直接退出了一样。
7.View类中setPadding和setMargins区别
有网友对View类中提供的setPadding和setMargins两个方法有什么区别不是很了解,其实在Android自绘控件时我们需要计算
控件大小,使用过getMeasuredWidth()
和getMeasuredHeight()方法计算和父容器之间的距离可以用setMargins方法, 对整个
屏幕的间距计算我们可以使用getWidth()和getHeight()这两个方法获得。
有关Padding和Margins的最好解释,教程之家
推荐网友设计在一个Layout中放上多个Button,设置Button的 Padding和Margins同时设置Button父View的这两个属性来观察下
按钮位置和按钮文字显示位置就可以简单区分不同了。
8.Android最简单播放GIF动画方法是?
很多网友觉得GIF动画竟然Android无法播放,其实GIF动画的原理就是逐帧播放,在Android中提供了AnimationDrawable类可以实现,有的网友写过GIF89A的解码方法在过去的J2ME平台
移植到Android平台也能用,其实在Google Android上面开发目前2.2以后的固件支持的方法除了Flash Player外,更好的兼容方法就是使用万能的webkit
浏览器了,
我们直接在工程中内嵌一个webView,当然了路径大家可以换成本地的,对于浏览器使用本地资源url为file://开头。
不过webView的资源消耗也不小,开个webView对象可能占用了至少8MB的RAM吧,保守估计,当然更多的要看插件和以及html的复杂程度所
决定的。
9.Binder invocation to an incorrect interface错误
有时候我们可能发现Android的版本不同,有些AIDL的调用可能会爆出ERROR/AndroidRuntime(28520):
java.lang.SecurityException: Binder invocation to an incorrect
interface这样的错误,表面上看是安全问题,但出现Binder invocation to an incorrect
interface这样的错误,可能是由于API变动导致了AIDL的声明有出入,为了防止执行意外出现空指针,Android平台默认保护了进一步的执
行,从错误的提示来看就是不正确的接口异常,一般我们检查时可以查看
源代码参考解决。
10.Android上开发手机浏览器原理
近期手机浏览器比较热门,如何开发一款Android上的手机浏览器呢? 今天就网友这一问题教程之家给大家一些思路。
目前Google的Android平台上有几款比较热门的产品,比如说Opera Mini、Dolphin Browser、Firefox、UC以及手机QQ浏览器等,他们之间还是有一定的区别:
1. Opera Mini使用的是自己的渲染引擎,页面经过重新排版处理,需要中间服务器干预好处就是压缩数据,省流量。
2. Dolphin Browser在国外用的比较多,国内用户较少,这里不做过多介绍。
3. Firefox在Android平台上是因为Google推出了
NDK,使用了mozilla自己的渲染引擎,支持Javascript解析,效率直逼Webkit内核,不过整体对W3C的支持大于桌面平台的IE。
4. UC是国内大家较熟知的产品前身为UCWEB,当初是为节省流量而设计类似Opera Mini,但对于JS脚本的支持无能为力,内部使用了自己的HTML解析器,当然现在的版本已经由服务器中转压缩数据,不过渲染
效果不如webkit和 firefox的效果好。
5. 手机QQ浏览器的实现类似UCWEB,比较山寨但UCWEB主要的
功能都包含了在内。
6. GO浏览器是3G门户推出的一款手机浏览器,和UC差不多,可以说是模仿。
经过上面的分析来看,Android开发网将手机浏览器定为两大类三种情况。
1. 高效内核、功能全面,比如Android自带的Chrome Lite,或
iPhone上的Safari浏览器,Firefox、IE。
2.
模拟浏
览器,Opera其实自己有解析引擎,但Opera
Mini更像一个html解析器,并不能真正的算浏览器和桌面上差距很大,UC、QQ以及GO类似Opera其实他们没有自主的JavaScript的支
持,对W3C标准支持有限和PC上的浏览器设计原理有很大的不同。
3. 增强型,基于Android的Webview或修改
WebView设计的基于webkit的产品,这类浏览器开发轻松,更像重新定制系统的浏览器,可以加入很多辅助功能,或者说更好的UI。