微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android通用应用程式

我想开发一个通用的应用程序.我是新手这个方法.这意味着平板电脑和手机应用程序的一个单一的apk.我经历了

Support Library

Fragments

我的目标是在单个APK中为平板电脑和手机构建不同的用户界面.

我读过Getting Your App Ready for Jelly Bean and Nexus 7.这篇文章提到

res/layout/activity_home.xml

To take advantage of the extra space on the 7” screen you might provide an alternative layout:

res/layout-sw600dp/activity_home.xml

The sw600dp qualifier declares that these resources are for devices that have a screen with at least 600dp available on its smallest side. 

    Furthermore you might even provide a different layout for 10” tablets:

res/layout-sw720dp/activity_home.xml

这意味着我们可以为不同的设备使用不同的布局.这让我很困惑

编辑1 ::场景

假设

if my phone UI layout contains one-view pager and 

tablet UI layout contain two-view pager  .

我们该如何实现呢?在这文章中,它表示您设计不同的布局与不同的屏幕相同的名称,并保留对应的文件夹.但是,如果在手机中运行应用程序时尝试初始化平板电脑布局的小部件组件,我的疑问将会出现异常.

编辑2:
这个想法进入我的脑海里是确定我正在使用哪种类型的设备,即Tab或手机.

Determine if the device is a smartphone or tablet?

然后如果应用程序是手机,则避免小部件的初始化.有没有比这更好的方法

编辑3:
我的应用程序支持从2.3到更高版本

如果我的平板电脑配置与手机布局相比有其他小部件.我如何初始化和使用.希望都明白我的需要.所以请澄清我的疑问

解决方法

当我面对这个问题时,我创建了以下结构.
res/layout
res/layout-sw600dp

那么要区分价值等资源,

res/values
res/values-sw600dp
res/values-sw720dp

您注意到只有一个布局目录和两个值目录来指定边距和边距等资源.所以单个布局可以用于7“以及10”平板电脑.这是我的场景,你也可以定义layout-sw720dp.我这样做是因为减少了布局的编译时间.

我在手机和平​​板电脑上也有不同的布局.例如,我在第一个屏幕中有一个ListView,然后当用户单击项目时,它将打开其他活动,并且有DetailView.但在平板电脑中,我已经左侧的ListView和右侧的DetailView.

所以要这样做,在值/字符串中,我放置以下代码,

<bool name="isTablet">false</bool>

对于平板电脑的价值,sw600dp /字符串也是一样

<bool name="isTablet">true</bool>

现在,来编码的一部分.我有一个闪屏,它有一个共同的布局.所以会显示普通屏幕.但是当用户点击任何按钮时,它会检查是否是平板电脑.要检查,

boolean isTablet = getResources().getBoolean(R.bool.isTablet);

您现在已经标记了您的应用程序是在手机还是平板电脑上运行.

我已经创建了两个包,

com.phone
com.tablet

那么根据国旗,我直接把我的活动打包到手机包和平板电脑包.

例,

if(isTablet)
    startActivity(this,TabXYZ.class);
else
    startActivity(this,PhXYZ.class);

这种方法解决了我的问题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐