当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括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实例》中将<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" />
Activity中使用getSupportFragmentManager()获取FragmentManager,之后调用beginTransaction去创建一个FragmentTransaction对象, 再调用add()方法即可添加一个fragment。 在activity中可以使用同一个FragmentTransaction对象去执行多个fragment事务,当做这样操作时,必须调用commint()方法。 下面的代码演示怎样添加一个fragment到res/layout/news_articles.xml的layout:
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,而不是直接使用<fragment>标签定义在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开发中,更推荐使用`ViewPager`结合`TabLayout`(来自`androidx.appcompat.widget`库)或者`BottomNavigationView`(来自`androidx.navigation.ui`库)来实现滑动Tab效果。这两种方法更稳定,且有更好...
在Android Studio中,Fragment是应用程序界面的一部分,可以独立于Activity进行部分交互,允许开发者在一个Activity中组合多个Fragment,以构建更灵活、模块化的布局。 Fragment的生命周期与Activity紧密相关,它有...
在Android应用开发中,下拉刷新(Pull To Refresh)功能是一项常见的UI交互设计,它允许用户通过在列表顶部向下拉动来触发数据的刷新操作。这一功能显著提升了用户体验,尤其是在查看实时信息更新时,如新闻、社交...
9. **Third-party UI库**:除了官方组件,还有很多第三方库增强了Android的UI开发能力,如Butter Knife(视图注入)、Retrofit(网络请求)、Glide(图片加载)、Picasso(图片加载)等。这些库简化了开发过程,提高...
Fragment是Android应用开发中的一个重要组件,它是在Android 3.0(API级别11)引入的,用于在Activity中管理用户界面的模块化部分。Fragment的设计使得开发者可以在一个Activity中包含多个Fragment,甚至在一个...
在Android开发中,Fragment是应用程序界面的一个模块化组件,它可以在Activity中添加、删除或替换。Fragment的概念引入是为了更好地支持大屏幕设备,如平板电脑,同时也增强了应用的灵活性和复用性。本篇将深入探讨...
在Android应用开发中,`Fragment`是Android UI设计的一个核心组件,它允许开发者在单一的Activity中构建可重用的模块化界面。`Fragment`的概念引入于Android 3.0 (API level 11),目的是为了更好地支持平板电脑等大...
本项目“安卓Android源码——基于Fragment实现Tab的切换,滑出侧边栏.zip”显然是一个示例,演示了如何使用Fragment来创建一个多标签导航界面,并结合侧滑菜单实现更丰富的用户交互。 1. **Fragment基础**: - ...
在Android应用开发中,Fragment是Android SDK中的一个重要组件,它被设计用来支持多屏幕适配和复杂的用户界面。本资料“安卓Android源码——Fragment例子.zip”提供了关于Fragment的实战示例,帮助开发者深入理解其...
在本项目中,"AndroidStudio————实战演练——仿美团外卖菜单"是一个专注于使用Android Studio开发的应用程序实战案例,目标是创建一个类似于美团外卖的菜单功能。这个项目涵盖了多个Android开发的关键知识点,...
这个名为“安卓Android源码——UI界面源码.zip”的压缩包,很显然是一个包含Android用户界面(UI)相关源代码的资源集合。下面我们将详细探讨Android UI界面的构建原理以及可能包含的知识点。 1. **Android UI框架*...
在安卓应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在单个活动中展示多个可交互的UI片段。此项目“安卓Android源码——基于Fragment实现Tab的切换,滑出侧边栏”是一个典型的Android应用程序,...
在Android中,Fragment是Activity的一部分,它有自己的生命周期和UI。在ViewPager中,每个可见的Page实际上就是一个Fragment实例。当用户滑动时,ViewPager会自动创建或销毁相应的Fragment,以优化内存使用。 3. *...
在Android开发中,Fragment是构建动态、可重用的用户界面的一个重要组件。它允许开发者在单个活动中展示多个UI片段。在这个实例中,我们将会深入理解如何使用Fragment来实现tab切换的效果,这对于创建一个多页面的...
在Android应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在单个活动中分割界面,使得在不同屏幕尺寸和配置上实现灵活的布局成为可能。Fragment最初在Android 3.0 (API level 11) 引入,用于平板...
QMUI 是腾讯团队推出的一款专为提升 Android 项目 UI 开发效率而设计的开源库。这个库包含了丰富的组件和工具,旨在简化界面设计,优化代码结构,让开发者能够更高效地构建美观、一致的 Android 应用程序。下面将...
根据给定文件的信息,本文将详细介绍如何使用Android Fragment创建动态用户界面(UI)。Android Fragment是Android开发中的一个重要组件,它允许开发者在一个Activity中动态地组合多个片段来构成复杂的UI布局。 ...
在这个"安卓Android源码——Fragment实现tab实例 代码.zip"中,我们将会探讨如何使用Fragment来构建一个具有Tab切换功能的应用。 1. **Fragment基本概念** - Fragment是一个可以添加到Activity中的UI模块,它可以...