Android NDK介绍及JNI调用

Android NDK是用来编译能在手机ARM平台上运行的,通过C/C++编写的LIB库。

注:理论上不只在ARM平台,以后应该也能在Intel x86平台上运行的。

JNI调用,是为了使java能够调用C/C++所编写的程序的一种机制。

Android NDK和JNI调用结合,就能够使Android程序,调用原生底层用C/C++实现的功能。

1.NDK开发环境配置

在Windows下开发需要安装Cygwin,安装时除了默认选择项外,还要选中gcc和make.

在Linux下,如Ubuntu,通过apt-get 安装gcc和make即可。

然后下载NDK,解压到特定的目录(如:D:\Android)

由于awt兼容性的问题,需要将D:\Android\android-ndk-r7\prebuilt\windows\bin中的awt.exe改为awt_.exe.

同时把D:\Android\android-ndk-r7加入到系统的PATH中,方便使用,

打开Cygwin,cd到/cygdrive/d/Android/an[......]

阅读全文

新浪SAE python试用

新浪目前提供SAE python版本的内测,内测帐号可以到http://appstack.sinaapp.com/queue申请,

一般估计5分钟左右就可以开通了,开通后没有任何提示,你要自己去SAE里新建项目,看能不能新建python项目了

通过sae python的文档,目前已支持以下几种web框架,比java版的进展快多了

比较了这几种框架,准备采用Flask作为自己的框架,因为比较简单,灵活性大,学习成本低。而且在SAE都只是做一些个人学习研究性的项目,不需要太复杂的功能。

目前已在本地配置好环境,参考dev-server的安装说明

准备做一下个保存WIKI条目的列表(如百家姓等),通过JSON格式输出,由Android手机端调用显示,并跳转到具体的WIKI页面。

另外目前维基百科访问时,有时候链接会被重置,跟Google一样,这是个头疼的问题,SAE在国内,也不能作为代理访问,这个只能到时候再看了。

Android EditText强制输入数字

需要控制同时软输入法和实体输入法

//控制输入法只能用数字输入法
inputEdit.setInputType(InputType.TYPE_CLASS_PHONE);

//设置文本框只接收数字输入,禁止实体键盘输入其他字符
DigitsKeyListener listener = new DigitsKeyListener();
inputEdit.setKeyListener(listener);

Android EditText 增加自定义过滤

在Android中,可以通过对EditText设置setFilters方法,用代码控制EditText的输入长度,或控制输入小数的位数等。

1.设置EditText的输入长度

inputEdit.setFilters(new InputFilter[] { new InputFilter.LengthFilter(
				length) });

2.控制输入小数的位数

		// 设置小数位数控制
		InputFilter lengthfilter = new InputFilter() {
			public CharSequence filter(CharSequence source, int start, int end,
					Spanned dest, int dstart, int dend) {

				// 删除等特殊字符,直接返回
				if ("".equals(source.toString())) {
					return null;
				}

				String[......]

阅读全文

Android LinearLayout根据状态切换图片(模拟按钮的效果)

在Android中Button可以根据选中,点击等状态切换图片,我想用LinearLayout实现类似的功能,

但是默认情况下pressed状态“容器类”(继承于ViewGroup的类)是接收不到的,

所以LinearLayout的按下就没有效果,后来分析代码,可以通过设置setAddStatesFromChildren

方法获得内部View的状态,就可以取得pressed状态。

linearLayout.setAddStatesFromChildren(true);

还有一个相反的方法setDuplicateParentStateEnabled,内部类获得外部容器类的状态,

这个方法和setAddStatesFromChildren不能同时设置,同时设置会产生异常。

Android layout布局相关的注意点

1.不要过多的嵌套布局,特别是在ListView中需要重复获取的情况下。嵌套布局的情况可以采用RelativeLayout替代LinearLayout,减少嵌套层数。

2.可以采用SDK工具里的hierarchyviewer,分析layout的执行效率。

3.利用新版的ADT(adt1.6)的提示功能,纠正布局文件中影响性能的部分。

4.在采用LinearLayout布局时,尽量不要嵌套中使用layout_weight属性,这会导致所有的内部VIew执行两次measure.

5.对于公用的layout编写,可以采用<merge>作为父标签,这样include到其他layout中后,merge标签不会作为容器,可以减少layout层次。

<merge xmlns:android="http://schemas.android.com/apk/res/android">

<Button
android:layout_width="fill_parent"
andro[......]

阅读全文

MatrixCursor(转载)

ContentProvider对外共享数据的时候的query()方法是需要一个cursor的。
但是当ContentProvider不是从数据库中去的数据,而又需要返回cursor的时候就需要MatrixCursor。

ContentProvider对外共享数据的时候的query()方法是需要一个cursor的,

但是如果没有数据库,而项目又需要从ContentProvider读取数据的时候怎么办?

更糟糕的是其他方法操作也都是需要cursor的。

此时就需要MatrixCursor了。相当有趣,它相当于为你模拟了一个表。

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
	String[] selectionArgs, String sortOrder) {
		String[] tableCursor = new String[] { "name", "job", "salary&quo[......]

阅读全文

不让ScrollView自动切换子View的焦点

在开发中,在同一个Activity中有多个输入框,不想让ScrollView自动切换EditText的焦点,
需要继承ScrollView,重写onRequestFocusInDescendants方法,然后在layout中使用自定义的ScrollView即可。

public class NonFocusingScrollView extends ScrollView {

    public NonFocusingScrollView(Context context) {
        super(context);
    }

    public NonFocusingScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NonFocusingScrollView(Context context, AttributeSet attrs,
            int defStyle)[......]

阅读全文