Android UI开发第三十篇——使用Fragment构建灵活的桌面
http://www.lupaworld.com/article-222973-1.html
当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏、7寸屏、 10寸屏等等,Android开发文档给了我们参考,而且Google IO的app(如图二)也实现了这种思想,他们都是使用layout、layout-large里面不同的布局文件实现的,下面是翻译的developer.android.com一篇的文章,里面的例子能详细的看出layout、layout-large并使用Fragmen构建灵活的桌面。
当设计应用程序,你可以在不同的布局结构中重复使用Fragment,以支持众多的屏幕尺寸,,在可用的屏幕空间上优化用户体验。例如在手持设备(如Nexus 4)上,一个屏显示一个Fragment,在更大屏(如Nexus 7)上可以使用多个Fragment显示信息。如下图:
图一
图一中,在大屏中两个Fragment显示在一个屏中,但是手持设备中,需要两屏显示完,一屏只能显示一个,他们之间需要相互引导。
FragmentManager类提供了一些方法,使您可以在Activity运行时添加,删除和替换Fragment,以创造一个灵活、动态的体验。
添加Fragment到一个运行的Activity
这里不是如同 《
Android UI开发第十七篇——Android Fragment实例》中将标签放到布局文件。而是使用FragmentManager动态的管理Fragment。FragmentManager创建一个FragmentTransaction,
它提供了添加,删除以及其他fragment事务的API。activity允许移除或者替换fragment需要有如下条件:
1、activity的onCreate()方法中添加初始化的fragment
2、fragment放置位置的布局中必须有一个视图容器
程序例子中, res/layout/news_articles.xml文件提供了视图容器。
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/fragment_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- import android.os.Bundle;
- import android.support.v4.app.FragmentActivity;
- public class MainActivity extends FragmentActivity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.news_articles);
- // Check that the activity is using the layout version with
- // the fragment_container FrameLayout
- if (findViewById(R.id.fragment_container) != null) {
- // However, if we're being restored from a previous state,
- // then we don't need to do anything and should return or else
- // we could end up with overlapping fragments.
- if (savedInstanceState != null) {
- return;
- }
- // Create an instance of ExampleFragment
- HeadlinesFragment firstFragment = new HeadlinesFragment();
- // In case this activity was started with special instructions from an Intent,
- // pass the Intent's extras to the fragment as arguments
- firstFragment.setArguments(getIntent().getExtras());
- // Add the fragment to the 'fragment_container' FrameLayout
- getSupportFragmentManager().beginTransaction()
- .add(R.id.fragment_container, firstFragment).commit();
- }
- }
- }
这里的fragment是在运行时添加到FrameLayout,而不是直接使用标签定义在activity的布局中,activity可以移除它或者使用另外一个不同的fragment替换它。
替换Fragment
替换一个fragment的过程和添加Fragment的过程差不多,但是需要的是replace()方法,而不是add()方法。 需要注意的是,当执行fragment事务时,比如替换或者删除一个fragment,如果想能回退到当前,你必须在你提交fragment事务之前调用 addToBackStack()方法。
当移除或替换fragment时将事务添加到堆栈中,被移除的Fragmeng没有消亡,如果用户返回,Fragment会重新启动。如果没有放入到堆栈中,当Fragment被替换或移除,Fragment会消亡。
下面是替换Fragment的例子:
- // Create fragment and give it an argument specifying the article it should show
- ArticleFragment newFragment = new ArticleFragment();
- Bundle args = new Bundle();
- args.putInt(ArticleFragment.ARG_POSITION, position);
- newFragment.setArguments(args);
- FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
- // Replace whatever is in the fragment_container view with this fragment,
- // and add the transaction to the back stack so the user can navigate back
- transaction.replace(R.id.fragment_container, newFragment);
- transaction.addToBackStack(null);
- // Commit the transaction
- transaction.commit();
addToBackStack()方法有一个可选的字符串参数,用来指定事务的唯一名称,这个是非必须的。
参考:http://developer.android.com/training/basics/fragments/fragment-ui.html
图二 Google IO APP
Android UI开发第三十篇——使用Fragment构建灵活的桌面相关推荐
- Android UI开发第三十九篇——Tab界面实现汇总及比较
Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇--ActivityGroup实现tab功能>.这 ...
- Android UI开发第三十二篇——Creating a Navigation Drawer
Navigation Drawer是从屏幕的左侧滑出,显示应用导航的视图.官方是这样定义的: The navigation drawer is a panel that displays the ap ...
- Android UI开发第三十三篇——Navigation Drawer For Android API 7
Creating a Navigation Drawer中使用的Navigation Drawer的android:minSdkVersion="14",现在Android API ...
- Android UI开发第四十篇——ScrollTricks介绍
ScrollTricks是一个开源控件,实现了两个简单功能: 1.Quick Return:向上滑动时,View也向上滑动并且消失,当向下滑动时,View马上出现.例如Google Now的搜索功能. ...
- Android UI开发第二十五篇——分享一篇自定义的 Action Bar
Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar.在3.0之前是不能使用Action Bar功能的.这里引入了自定义的Action Bar, ...
- Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现
周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...
- Android UI开发——AppCompat实现Action Bar
http://blog.csdn.net/xyz_lmn/article/details/12623609 每一位Android开发者对Action Bar这种设计都不陌生了,毕竟它已经发布了至少两年 ...
- Android项目实战(三十二):圆角对话框Dialog
原文:Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对 ...
- Android camera(4)---Android Camera开发之基础知识篇
Android Camera开发之基础知识篇 转自:https://blog.csdn.net/feiduclear_up/article/details/51968975#jump5 概述 Andr ...
最新文章
- php 变更 obj,PHP: 不向后兼容的变更 - Manual
- 医学科研中的作用_医学论文中参考文献的作用及常见类型
- minifilter
- Docker网络和服务发现
- 链表用java实现简单单链表linkedlist
- 《计算机组成原理》课程设计任务书——TEC-2实验系统——微程序设计
- git——^和~的区别(转)
- .Net开源微型ORM框架测评
- 防抖函数和节流函数的实现,这个是在某保险公司笔试题遇到的。
- 史上最大多模态图文数据集发布!
- 组合数学 —— 组合数取模 —— 逆元与递推打表
- 20165205 2017-2018-2 《Java程序设计》实验三 敏捷开发与XP实践
- a form 出口享惠情况_次磷酸8类危险品海运出口
- 基于visual Studio2013解决面试题之1401冒泡排序
- c++时间类型详解 time_t
- java对象占用内存的说法_JAVA 中关于对象成员占用内存的说法哪个正确 (3.0分)_学小易找答案...
- spring事务失效一:非public方法
- lldp协议代码阅读_查看链路层发现协议(LLDP)关于交换机的端口状态信息
- 我的世界服务器修改空岛范围,我的世界空岛指令权限大全 | 手游网游页游攻略大全...
- 360儿童手表显示服务器错误,360儿童卫士刷机失败怎么办 刷机方法
热门文章
- poi 拆分带图片的word_java poi设置生成的word的图片为上下型环绕以及其位置的实现...
- 卸载MySQL Connector NET无法卸载
- 006_表的CRUD的操作
- 009_JMS中的事务
- 024_jdbc-mysql的Dao模式
- java获取content-disposition_java – Content-Disposition附件不起作用 – 将...
- android热更新插件,与Android热更新方案Amigo的再次接触
- 用ftp、http搭建网络yum源
- mysql 内存引擎_MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
- Java基础:char类型字节占用数