两个发射器活动在手机上,一个在平板电脑上

San*_*dra 7 android android-activity

我正在为Android 4.0+创建一个应用程序,我希望实现此行为.当用户的设备是电话时,两个不同的活动将具有两个启动器图标,并且在平板电脑设备上它将只是一个(活动将包括我将在一个主要活动中显示为标签的片段).我知道一个可以设置多个发射活动中的表现,但我想,也许我需要的东西,将在运行时确定此操作(在Java代码中).

Com*_*are 12

当用户的设备是电话时,两个不同的活动将具有两个启动器图标,并且在平板电脑设备上它将只是一个(活动将包括我将在一个主要活动中显示为标签的片段).

在"手机"和"平板电脑"的Android中没有概念.我将假设您在屏幕尺寸方面区分"手机"和"平板电脑".

如果是这样的话:

步骤1:创建一个res/values/bools.xml文件并定义两个<bool>资源,is_phoneis_tablet.有is_phonetrueis_tabletfalse.

第2步:创建一个res/values-.../bools.xml文件,其中...的任何限定使用的是与你的布局"手机"和"平板电脑"(例如,区分-large,-xlarge,-swNNNdp).<bool>用相反的值定义相同的两个资源(即is_phoneis false,is_tabletis true).

步骤3:将两个活动添加到清单中,每个活动都设置为MAIN/ LAUNCHER <intent-filter>.在要在"手机"上使用的那个上,添加android:enabled="@bool/is_phone"<activity>元素.在要在"平板电脑"上使用的那个上,添加android:enabled="@bool/is_tablet"<activity>元素.

这样,根据您用于布局的相同规则,您将拥有不同的启动器活动.


显然,这不起作用,虽然我发誓过去.

另一种选择是将单个活动作为MAIN/ LAUNCHERone.有它设置android:theme="@style/Theme.NoDisplay",所以它没有用户界面.让它在Java中确定onCreate()哪些"真正的"入口点活动适合于给定的屏幕大小,可能使用bool我上面引用的相同资源.然后让它调用startActivity()将控制传递给正确的活动finish()自行调用(因此用户不会在BACK堆栈上遇到不可见的活动).这种技术也可用于无法通过清单控制此问题的情况,例如"我们是否有地图V1",你android:required="false"<uses-library>元素上.


Ama*_*tam -1

您将需要制作多个 apk,一个用于标签,一个用于手机,唯一的区别是这些 apk 中的清单文件。其余的你可以用代码来管理。