Fragment应该知道的一切(2)

功能需求:如何使用自适应活动布局定义来创建应用程序,以便根据设备外形因素的差异自动重新排列其用户界面。 

解决方案:借助自适应活动布局定义,应用程序只需使用几个设计合理的片段即可支持多种设备,解决设备布局中特定差异。

能力要求:能够实现一个用户界面,该界面使用片段自动适应设备布局的差异,并在涉及的片段中协调用户操作。

    在用户界面设计中使用,Fragment为创建更容易适应设备差异的应用程序提供了良好的基础,但必须进一步创建真正灵活的用户界面,以便构成UI的Fragment可以轻松地重新排列,以响应应用程序当前运行的设备的特性。为了实现这一点,必须根据当前设备的特性动态改变各个Fragment的布局,必须确保以这样的方式实现Fragment,即每个Fragment都可以有效地发挥作用,而不影响Activity内其他Fragment的行为或甚至存在的布局的变化。

1、动态加载Fragment布局

    创建一个灵活的用户界面要求在一个Activity中Fragment的布局和定位能够根据设备特性的差异而改变。可以在应用程序中包含代码,以响应运行应用程序的设备的形状因素动态安排Fragment,但在大多数情况下,这样做不仅是不必要的,而且也是不可取的。用户界面和应用程序代码之间的依赖关系越深,越难以维护和增强应用程序尽管用户界面和应用程序代码之间始终存在某种程度的依赖关系,但应当尽量减少这种依赖关系,并尽可能在布局资源中尽可能多地执行与用户界面布局相关的工作。在应用程序与用户界面之间建立灵活性的最简单方法是利用Android资源系统内置的设备适应性。 Android允许我们为应用程序设计不同的布局相关资源,每个资源都针对特定的一组特定设备进行了优化(并与之关联)。在运行时,Android资源系统负责为当前设备自动选择和加载适当的资源。虽然此功能可用于动态修改任何活动的布局,但在与Fragment结合使用时,此功能特别有效。

效果图:

 

在图中,当手机屏幕为竖屏时,空间较小,显示名人列表在上,详情介绍在下;当手机屏幕为横屏时(或为平板设备等),空间较大,如果仍然显示列表在上详情在下则阅读不方便,应布局为列表与详情水平一致较好。

此时如果在Activity界面中进行代码控制则后期维护代价较高,此时应考虑采用Fragment,实现动态布局的效果。

    1.1、布局列表fragment_contacts_list.xml

    

    1.2、布局详情界面fragment_contacts_desc.xml

    

    1.3、布局竖屏activity_contacts.xml

    

    1.4、布局横屏activity_contacts.xml

    横屏需要在res文件夹中创建横屏布局资源文件夹layout-land;其次命名与layout文件夹中保持一致;

    

    1.5、创建ContactActivity,加载activity_contacts.xml

    

    1.6、创建ContactsListFragment,并加载fragment_contacts_list.xml

    

    1.7、创建ContactsDescFragment,并加载fragment_contacts_desc.xml

    

    运行程序,进入ContactsActivity,效果如上图。

    如果没有Fragment,将不得不在整个布局文件中为Activity添加单选按钮,文本视图和所有内容提供整个布局。 然后不得不维护两个复杂的,几乎完全相同的文件。 使用Fragment,单个Fragment是独立的且不复制的。Fragment以简单的方式修改布局,并简化应用程序的维护。

    如果更细致的适应不同尺寸大小的设备,则需要建立不同尺寸的布局文件夹(比如:w600),调试activity_contacts.xml;但逻辑代码却是相同的一套方案,利于后期的修改与维护;如果在设计之初通过代码控制来显示,由于交互与布局的耦合性太多,将会导致维护复杂,难于管理。

    Fragment可以预防意外情况,用户界面灵活性的真正测试在于用户界面设计和实现,在遇到意外更改请求时的正确性。精心设计的基于Fragment的用户界面能够创建令人难以置信的动态用户界面,这些用户界面可以在对代码影响最小的情况下发展和变化。

猜你喜欢

转载自blog.csdn.net/jackiandroid/article/details/80148254
今日推荐