轻量级免声明的 Activity 代理框架

网友投稿 611 2022-10-25

轻量级免声明的 Activity 代理框架

轻量级免声明的 Activity 代理框架

AyoActivityNoManifest

demo apk

1 这是什么?

2 ActivityAttacher的使用

(1) manifest

在gradle里引入:compile 'org.ayo:ayo-attacher:1.0.0'

(2) ActivityAttacher

ActivityAttacher的意义: ActivityAttacher就是附着在上面4个模板Activity里的Activity代理ActivityAttacher中持有一个Activity实例对象,是在onCreate时赋值的ActivityAttacher可以处理Activity中的所有配置和生命周期ActivityAttacher提供的接口,原则上应该完全仿Activity,这一点类似v7源码中的和AppCompactActivity相关的一个delegate类,但不知道这个类是干什么用的

(3) 定义Activity

public class SampleActivity extends AyoActivityAttacher{ public static void start(Context c, boolean takeSystemBar, int lanuchMode, OnResultCallBack callBack){ SimpleBundle sb = new SimpleBundle(); sb.putExtra("takeSystemBar", takeSystemBar); ActivityAttacher.startActivity(c, SampleActivity.class, sb, false, lanuchMode, callBack); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ac_tmpl); }}public class SampleActivity extends AyoActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ac_tmpl); }}

(4) 启动ActivityAttacher

启动方式变成这样:

public static void start(Context c, boolean takeSystemBar, int lanuchMode, OnResultCallBack callBack){ SimpleBundle sb = new SimpleBundle(); sb.putExtra("takeSystemBar", takeSystemBar); ActivityAttacher.startActivity(c, SampleActivity.class, sb, false, lanuchMode, callBack);}

SimpleBundle:功能类似于intent或者bundle,存的是传到下一个Activity的参数 取出参数:boolean takeSystemBar = getIntent().getBooleanExtra("takeSystemBar");这里,在Activity之间传的都是引用,不再需要考虑序列化问题,当然只适用于app单进程内 OnResultCallBack是接收Activity的回传结果 如何回传:getResultCallback().onResult("代替OnActivityReslt和setResult"); finish(); lanuchMode是选择Activity的启动模式,也就是选择模板: ActivityAttacher.LAUNCH_MODE_STANDARDActivityAttacher.LAUNCH_MODE_SINGLE_TASKActivityAttacher.LAUNCH_MODE_SINGLE_TOPActivityAttacher.LAUNCH_MODE_SINGLE_INSTANCE

(5) Activity主题

这里提供了两个主题:AyoTransparentTheme和AyoTheme,没啥特殊的

3 状态栏一体化问题

问题1:颜色设置,可以开启和关闭,分status bar和navigation bar

问题2:是否侵入,可以开启和关闭,和颜色设置不冲突

代码

@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sample_ac_main); //关闭StatusBar和NavigationBar侵入 getAgent().enableSystemBarTakenByContent(false); //给StatusBar和NavigaionBar染色 getAgent().renderSystemBar(Color.parseColor("#55ff0000"), Color.parseColor("#55ff0000"));}

解析: 这里就是对开源代码SystemBarTintManager的简单封装enableSystemBarTakenByContent其实就是设置根布局的android:fitsSystemWindows属性

4 状态保存问题

https://github.com/frankiesardo/icepick

5 其他

关于clipToPadding和clipToChildren:默认都为true http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0317/2613.html

好像和滚动有关,可以上下滚动时,内容是否可以滚动到标题栏里

ListView初始化之后,由于top的50dp的padding,看似顶着标题栏,但往上滚动时,内容就会跑到padding的50dp里,也就能从标题栏看到了(如果标题栏带透明)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:从网络字节流中读取2个字节拼装成为short
下一篇:Jupyter notebook中5个有趣的魔法命令
相关文章

 发表评论

暂时没有评论,来抢沙发吧~