Android API个人库的建设

本文介绍了一个用于积累Android开发经验和个人API库建设的方法。通过创建特定的Activity并利用系统的Intent过滤功能,可以自动加载和展示一系列预设的UI布局示例。此方法有助于开发者更好地理解和应用Android的各种组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一个公司得到的经验是, 建设个人的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. 优秀实践的登录界面

展示效果:

下载地址:

第一个版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值