前一个公司得到的经验是, 建设个人的API库, 不但可以积累一些常见的工作经验, 更重要的养成持续改进的好习惯, 因此决定从今天起, 开始建设Android的API库, 关键点在于

1. 常用GUI

2. 四大组件的应用场景

3. IPC 场景

4 JNI场景

5 Binder 机制, 尤其是本地侧


借助系统Activity过滤的功能, 可以自动实现对上述的系统API描述的Activity进行加载, 加载如下面的源码所示:

package com.ostrichmyself;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.app.ListActivity;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ListView;import android.widget.SimpleAdapter;/** * 这个界面完全是用来展示的, 它的作用是启动其它待展示的Activity. * 目前用List方式去展示, 参考API Demo的实现 * @author tiant5 * */public class MainActivity extends ListActivity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                                setListAdapter(new SimpleAdapter(this, getData(),                android.R.layout.simple_list_item_1, new String[] { "title"},                new int[] { android.R.id.text1}));        getListView().setTextFilterEnabled(true);                    }        private List<HashMap<String, Object>> getData()    {            ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();    //通过下面的方式提取设定的UI Activity        Intent mainIntent = new Intent("action.ostrichmyself.ui", null);        mainIntent.addCategory("catagory.ostrichmyself.ui");        PackageManager pm = getPackageManager();        List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);        for (int i = 0; i < list.size(); i++)        {        HashMap<String, Object> hashMap = new HashMap<String, Object>();        ResolveInfo info = list.get(i);        Log.e("--ostrichmyself--", info.activityInfo + "-activeInfo-");        hashMap.put("title", info.loadLabel(pm).toString());        Intent intent = createIntent(info.activityInfo.applicationInfo.packageName, info.activityInfo.name);        hashMap.put("intent", intent);        data.add(hashMap);        }    return data;    }        protected Intent createIntent(String pkg, String componentName) {        Intent result = new Intent();        result.setClassName(pkg, componentName);        return result;    }            @Override    protected void onListItemClick(ListView l, View v, int position, long id) {        HashMap<String, Object> map = (HashMap<String, Object>) l.getItemAtPosition(position);        Intent intent = (Intent) map.get("intent");        startActivity(intent);    }}

这样,当Manifest.mf文件中描述了对应的action为action.ostrichmyself.ui; category为category.ostrichmyself.ui的activity时, 将自动加载成列表.Manifest.mf文件如下描述:

        <activity android:name=".composite.GridActivity001" android:label="Grid效果">            <intent-filter>                <category android:name="catagory.ostrichmyself.ui" />                 <action android:name="action.ostrichmyself.ui" />            </intent-filter>        </activity>


第一批纳入规划的为UI的布局, 这些布局大多来自比较优秀的实践, 部分采用了反编译的方式得到.


  1. 并列的应用列表方式.
  2. 优秀实践的登录界面

展示效果:

下载地址:

第一个版本

更多相关文章

  1. 【android】个人推崇的数据库升级方式
  2. android webview与h5交互时所遇到的坑
  3. [Android] SharedPreferences(轻量级的存储方式)
  4. Android新的网络请求框架volley源码解释及示例
  5. Android之Activity之间的数据通信方式大全(一)
  6. [Android]应用界面创建控件的两种方式
  7. Android开源项目分包方式学习(eoe、oschina、github)
  8. android中屏幕适配的方式
  9. Android多线程的实现方式及使用场景

随机推荐

  1. Android(安卓)layout之优化:使用include和
  2. tag tab label在android的区别
  3. Android(安卓)VideoView播放本地视频短暂
  4. Android(安卓)SurfaceView 详解
  5. 申请Mob的SMSSDK的短信验证功能及获取包
  6. Android(安卓)添加按电源键结束通话
  7. 自定义Dialog 去掉标题
  8. Android中实现为TextView添加多个可点击
  9. Android应用程序签名和权限增强应用程序
  10. 【Shader】适合 Android(安卓)手机上 Gra