如何根据Android API级别加载不同的活动实现?

我想参加一个活动班,例如ActivityLegacy,适用于比x级更早的API级别和一个活动类,例如ActivityNew适用于更新的设备.

我是否可以在运行时选择适当的实现并加载它?我不想开始新的意图.

解决方法:

I don’t want to start a new intent.

嗯,让活动显示在屏幕上的唯一方法是通过Intent.有人在打电话给startActivity()或亲戚.这是您的代码还是第三方代码将取决于情况.

Is it possible that I choose the proper implementation at runtime and load it?

如果您是一个调用startActivity()的人,请为所需的类设计Intent.

如果您不是一个调用startActivity()的人,我建议您只有一个活动,然后对活动内容使用片段(或类似内容),以便可以根据API级别干净地加载正确的片段.否则,您有两个我可以想到的主要选择.

如果外部方正在使用隐式Intent(例如,操作字符串)来启动您的活动,则您可能会有两个< activity>相同< action>的元素在清单中,为您的两个实现中的每个实现之一.但是,他们每个人都有android:enabled指向布尔资源,这些资源会因API级别而异.假设您希望Android 6.0上的活动与旧版本上的活动不同. res / values / bools.xml将is23定义为false,将isPre23定义为true. res / values-v23 / bools.xml将is23定义为true,将isPre23定义为false.您23年前的活动将具有android:enabled =“ @ bool / isPre23”;您的23岁及以上的活动将具有android:enabled =“ @ bool / is23”.这样,基于API级别,将仅对该动作字符串启用一个活动.

如果您处于某种不可思议的场景中,而您无法控制的明确意图是用于启动活动的意图,则总共需要三个活动:

> 23年前的版本.
> 23或以上.
>由该明确的Intent标识的一个,它将使用Theme.Nodisplay(因此没有UI).在onCreate()中,您将基于API级别调用startActivity()进行正确的活动,然后调用finish()将控制权传递给所需的活动.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...