Android(安卓)API个人库的建设V1.0 【UI相关】
16lz
2021-01-26
前一个公司得到的经验是, 建设个人的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的布局, 这些布局大多来自比较优秀的实践, 部分采用了反编译的方式得到.
- 并列的应用列表方式.
- 优秀实践的登录界面
展示效果:
下载地址:
第一个版本
更多相关文章
- 【android】个人推崇的数据库升级方式
- android webview与h5交互时所遇到的坑
- [Android] SharedPreferences(轻量级的存储方式)
- Android新的网络请求框架volley源码解释及示例
- Android之Activity之间的数据通信方式大全(一)
- [Android]应用界面创建控件的两种方式
- Android开源项目分包方式学习(eoe、oschina、github)
- android中屏幕适配的方式
- Android多线程的实现方式及使用场景