【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的更多相关文章

  1. 【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 ...

  2. [转]加速Android Studio/Gradle构建

    加速Android Studio/Gradle构建 android android studio gradle   已经使用Android Studio进行开发超过一年,随着项目的增大,依赖库的增多, ...

  3. gradle构建android项目详解

    1.用Gradle构建 1.1 工程结构 如图所示,这是一个不能更普通的Android的Gradle工程了. 根目录下面的settings.gradle当中主要是用来include子模块的,比如我们这 ...

  4. 《Android Studio实战 快速、高效地构建Android应用》--五、备忘录实验(1/2)

    通过开发App熟悉Android Studio的用法 开发一款用于管理备忘事项列表的App,核心功能: 创建.删除备忘 将某些备忘标记为重要(左侧带颜色标签突出显示) 涉及:操作栏菜单.上下文菜单.用 ...

  5. 《Android Studio实战 快速、高效地构建Android应用》--Android Studio操作

    前言 摩尔定律:CPU的处理能力大约18个月翻一倍 Android&Java:想要在Android Studio中开发Android App,必须以充分了解Java为前提(Java流行的原因: ...

  6. android的快速开发框架集合

    出自:http://blog.csdn.net/shulianghan/article/details/18046021 1.Afinal  (快速开发框架) 简介:http://www.oschin ...

  7. 【构建Android缓存模块】(一)吐槽与原理分析

    http://my.oschina.net/ryanhoo/blog/93285 摘要:在我翻译的Google官方系列教程中,Bitmap系列由浅入深地介绍了如何正确的解码Bitmap,异步线程操作以 ...

  8. 快速接入 Android BLE 开发的基础框架

    代码地址如下:http://www.demodashi.com/demo/12092.html ** Android BLE基础操作框架,基于回调,操作简单.包含扫描.多连接.广播包解析.服务读写及通 ...

  9. Android Studio快速开发之道

    概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. P ...

随机推荐

  1. unity3d——自带寻路Navmesh (三)(转)

    继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下两个例子,先看看完成的效果:   第一个例子对于喜欢DOTA的朋友应该很熟悉了,就是不同小队分不同路线进攻的寻路,红绿蓝三个队伍分别根据三条路 ...

  2. RabbitMQ(一) -- Hello world

    RabbitMQ -- Hello world RabbitMQ使用AMQP通信协议(AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同 ...

  3. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  4. [自制简单操作系统] 7、多任务(二)——任务管理自动化&任务休眠

    前言 >_<" 这里仿照窗口管理的方式将任务管理也修改成相应的管理模式,这样可以灵活的添加多个任务,而不必每次都要修改任务切换函数:此外还在任务休眠做了尝试,通过将任务挂起和唤醒 ...

  5. 图解AngularJS Wijmo5和LightSwitch

    Visual Studio 2013 中的 LightSwitch 有新增功能,包括更好的团队开发支持以及在构建 HTML 客户端桌面和 Office 365 应用程序方面的改进.本文结合最新发布的W ...

  6. H5 Canvas刮刮乐

    玩游戏的人 很多时候都会遇到翻牌子  开宝箱. 总有人傻傻的在哪里还纠结很久到底点哪一个! 纠结  指不定翻哪一个会多一点,你明明看到那个卡片的奖项多 . 那我就告诉你好了  其实很多时候在你点开那个 ...

  7. AngularJS 源码分析3

    本文接着上一篇讲 上一篇地址 回顾 上次说到了rootScope里的$watch方法中的解析监控表达式,即而引出了对parse的分析,今天我们接着这里继续挖代码. $watch续 先上一块$watch ...

  8. 【UML】UML基础知识

    UML简介     统一建模语言(UML)是一个通用的可视化建模语言,用于对软件进行描述.可视化处理.构造和建立软件系统制品的文档.     它记录了对必须构造的系统的决定和理解,可用于对系统的理解. ...

  9. atitit.js 各版本 and 新特性跟浏览器支持报告

    atitit.js 各版本 and 新特性跟浏览器支持报告 一个完整的JavaScript实现是由以下3个不同部分组成的 •核心(ECMAScript)--JavaScript的核心ECMAScrip ...

  10. atitit.自适应设计悬浮图片的大小and 位置

    atitit.自适应设计悬浮图片的大小and 位置 #--------最好使用relate定位.. 中间,图片的大小和位置走能相对table, 没有遮罩左的或者哈面儿文本的问题,要悬浮,使用top:- ...