【Android】如何快速构建Android Demo
【Android】如何快速构建Android Demo
简介
在 Android 学习的过程中,经常需要针对某些项目来写一些测试的例子,或者在做一些 demo 的时候,都需要先写 Activity 然后注册。
如果里面有太多的跳转的话,还需要每个跳转都增加一个事件。这些都是非常繁琐的步骤。那么如何省略这些步骤呢?
有一种办法就是使用 Fragment,然后按照“约定大于配置”的原则,遍历安装包下符合条件的 Fragment 然后自动构建目录索引与跳转动作。
通俗来讲,就是把 APK 里面的包结构文件当做树形结构的文件夹来处理,然后构建一个文件浏览器。当然,我们构建的“类浏览器”。
一个完整的实现请参考 https://github.com/xesam/AndroidQuickDemo
PS:AndroidQuickDemo 同时增加了 Activity 的支持,但是由于 Android 系统的限制,Activity必须被注册,这一点是无法绕过去的。
当然,也可以使用插件的原理,达到自动索引 Activity 的目的,不过,在我的实际使用中,当一定要使用 Activity 的时候,肯定是为了使用或者探究 Activity 的直接效果,而不应该进行代理或者拦截。
使用方式
compile 'dev.xesam.android:quick-demo-creator:0.2.0'
使用方式
现在支持两种模式:
1. 列出所有已经注册的 Activity,点击即可打开
这个方式只是使用一个列表简单列出所有的已注册 Activity,然后点击即可打开。
用法:
QuickDemo.inflateActivity(activity, R.id.listview);
2. 像文件管理器一样,列出 app 的目录索引
个人比较推荐这种用法,直接构建完整的“类浏览器”。
lib工程里面已经内置了一个 QuickDemoActivity,你只需要在你的 Android 项目中的 AndroidManifest.xml 中注册这个 Activity,并设置为 LAUNCHER Activity 即可
<activity
android:name="dev.xesam.android.quickdemo.QuickDemoActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
如果你不想使用内置的 QuickDemoActivity,那么也可以在自己的 Activity 中来显示目录,只需要提供一个 container view id 就可以了,示例如下:
public class MyManActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
QuickDemo.inflateActivity(this, R.id.lv);
}
}
默认的目录索引只会显示当前 PackageName 下名称中包含 "demo 或者 sample 或者 example"的 Activity 或者 Fragment,
如果想按照自己的规则来定义过滤,可以自定义 QuickDemoFilter,一个示例如下:
public class CustomFilter implements QuickDemoFilter {
Pattern target = Pattern.compile("demo|sample|example", Pattern.CASE_INSENSITIVE);
String pkgName;
public CustomFilter(Context context) {
pkgName = context.getPackageName();
}
@Override
public boolean filter(String className) {
String[] comps = className.split("\\.");
String simpleClassName = comps[comps.length - 1];
return className.startsWith(pkgName) && target.matcher(simpleClassName).find() && simpleClassName.indexOf("$") == -1;
}
}
然后在对应的 Activity 中:
public class MyManActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
QuickDemo.inflateDemo(this, R.id.quick_demo_root, new CustomFilter(this));
}
}
效果预览



Android分享 Q群:315658668
【Android】如何快速构建Android Demo的更多相关文章
- 【Android开发】构建Android源码编译环境
原文:http://android.eoe.cn/topic/android_sdk 构建Android源码编译环境 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- [转]加速Android Studio/Gradle构建
加速Android Studio/Gradle构建 android android studio gradle 已经使用Android Studio进行开发超过一年,随着项目的增大,依赖库的增多, ...
- gradle构建android项目详解
1.用Gradle构建 1.1 工程结构 如图所示,这是一个不能更普通的Android的Gradle工程了. 根目录下面的settings.gradle当中主要是用来include子模块的,比如我们这 ...
- 《Android Studio实战 快速、高效地构建Android应用》--五、备忘录实验(1/2)
通过开发App熟悉Android Studio的用法 开发一款用于管理备忘事项列表的App,核心功能: 创建.删除备忘 将某些备忘标记为重要(左侧带颜色标签突出显示) 涉及:操作栏菜单.上下文菜单.用 ...
- 《Android Studio实战 快速、高效地构建Android应用》--Android Studio操作
前言 摩尔定律:CPU的处理能力大约18个月翻一倍 Android&Java:想要在Android Studio中开发Android App,必须以充分了解Java为前提(Java流行的原因: ...
- android的快速开发框架集合
出自:http://blog.csdn.net/shulianghan/article/details/18046021 1.Afinal (快速开发框架) 简介:http://www.oschin ...
- 【构建Android缓存模块】(一)吐槽与原理分析
http://my.oschina.net/ryanhoo/blog/93285 摘要:在我翻译的Google官方系列教程中,Bitmap系列由浅入深地介绍了如何正确的解码Bitmap,异步线程操作以 ...
- 快速接入 Android BLE 开发的基础框架
代码地址如下:http://www.demodashi.com/demo/12092.html ** Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...
- Android Studio快速开发之道
概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. P ...
随机推荐
- 移植到Windows CE 的经验
Windows CE 是微软早期推出的嵌入式设备和移动设备的开发运行平台,虽然目前移动端几乎都是android和ios的天下,但是,在嵌入式设备领域,Windows CE仍然占有一块地盘.很多用户希望 ...
- 深入理解javascript 中的 delete(转)
在这篇文章中作者从<JavaScript面向对象编程指南>一书中关于 delete 的错误讲起,详细讲述了关于 delete 操作的实现, 局限以及在不同浏览器和插件(这里指 firebu ...
- 在 .NET 4.5 中反射机制的变更
反射机制(Reflection)通常会涉及到3中场景: 运行时反射 场景:可以检索已加载程序集.类型.对象.实例和方法调用的元数据(Metadata). .NET 支持情况:支持 仅供静态分析的反射 ...
- [ucgui] 对话框8——Framewin小工具
>_<" 这里主要是窗口小工具Framewin的用法介绍,包括创建背景窗口及其消息回调函数,创建Frame窗口并设置其回调函数,这里一些其他的功能被我注释掉了,有向状态栏添加最大 ...
- Firefox SVG getBBox方法返回'NS_ERROR_FAILURE'错误分析
在SVG中,我们无法给Text元素设置Width和Height属性,因此无法直接获取Text元素的高和宽.如果想要给Text元素添加背景色,最简单的办法就是在Text元素的下面添加Rect,然后给Re ...
- spring三种实例化bean的方式
1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public v ...
- lucene索引文件大小优化小结
http://www.cnblogs.com/LBSer/p/4068864.html 随着业务快速发展,基于lucene的索引文件zip压缩后也接近了GB量级,而保持索引文件大小为一个可以接受的范围 ...
- 【UML】类图的几种关系总结
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
- atitit.ajax 最佳实践跟框架选型 o99
atitit.ajax 最佳实践跟框架选型 1. 选型框架dwr/dwr3 跟jq 1 2. DWR方便的地方分为两个地方. 1 3. dwr 优点: 1 4. 缺点: 2 5. 根jq的区别 2 1 ...
- atitit. orm mapping cfg 映射配置(3)-------hbnt one2maney cfg
atitit. orm mapping cfg 映射配置(3)-------hbnt one2maney cfg 1. 建立list 1 2. 配置xml 1 3. Hibernate中Set和L ...