博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】如何快速构建Android Demo
阅读量:6482 次
发布时间:2019-06-23

本文共 2342 字,大约阅读时间需要 7 分钟。

  hot3.png

【Android】如何快速构建Android Demo

简介

在 Android 学习的过程中,经常需要针对某些项目来写一些测试的例子,或者在做一些 demo 的时候,都需要先写 Activity 然后注册。 如果里面有太多的跳转的话,还需要每个跳转都增加一个事件。这些都是非常繁琐的步骤。那么如何省略这些步骤呢?

有一种办法就是使用 Fragment,然后按照“约定大于配置”的原则,遍历安装包下符合条件的 Fragment 然后自动构建目录索引与跳转动作。 通俗来讲,就是把 APK 里面的包结构文件当做树形结构的文件夹来处理,然后构建一个文件浏览器。当然,我们构建的“类浏览器”。

一个完整的实现请参考

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 即可

如果你不想使用内置的 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));    }}

效果预览

Screenshot_2015-08-12-23-36-42.png

Screenshot_2015-08-12-23-36-47.png

Screenshot_2015-08-12-23-36-53.png

Android分享 Q群:315658668

转载于:https://my.oschina.net/xesam/blog/650558

你可能感兴趣的文章
ScrollView中嵌套ListView
查看>>
观察者模式
查看>>
在properties.xml中定义变量,在application.xml中取值问题
查看>>
cell reuse & disposebag
查看>>
【故障处理】ORA-12545: Connect failed because target host or object does not exist
查看>>
js判断移动端是否安装某款app的多种方法
查看>>
学习angularjs的内置API函数
查看>>
4、输出名称 Exported names
查看>>
Pre-echo(预回声),瞬态信号检测与TNS
查看>>
【转载】如何发送和接收 Windows Phone 的 Raw 通知
查看>>
poj2378
查看>>
Java文件清单列表
查看>>
js url传值中文乱码之解决之道
查看>>
Trusty TEE
查看>>
[LeetCode] Reverse String 翻转字符串
查看>>
学习iOS【3】数组、词典和集合
查看>>
Hessian 原理分析--转
查看>>
转: 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端
查看>>
easyui传入map的数据前台展示出tree格式数据
查看>>
悲观的思考,乐观的生活.我们既需要思考的深度,也需要生活的温度!
查看>>