`
cavalry800528
  • 浏览: 53073 次
文章分类
社区版块
存档分类
最新评论

Android UI开发第三十篇——使用Fragment构建灵活的桌面

 
阅读更多

          当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括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

 

 

*  我的新浪微博:@张兴业TBOW
*  我的邮箱:xy-zhang#163.com#->@)
*/

 

 

 

2
2
分享到:
评论

相关推荐

    UI开发第六篇——仿QQ的滑动Tab

    在现代Android开发中,更推荐使用`ViewPager`结合`TabLayout`(来自`androidx.appcompat.widget`库)或者`BottomNavigationView`(来自`androidx.navigation.ui`库)来实现滑动Tab效果。这两种方法更稳定,且有更好...

    Android Studio —— fragment

    在Android Studio中,Fragment是应用程序界面的一部分,可以独立于Activity进行部分交互,允许开发者在一个Activity中组合多个Fragment,以构建更灵活、模块化的布局。 Fragment的生命周期与Activity紧密相关,它有...

    Android UI开发第二十一篇——下拉刷新列表实现(pull to refresh)

    在Android应用开发中,下拉刷新(Pull To Refresh)功能是一项常见的UI交互设计,它允许用户通过在列表顶部向下拉动来触发数据的刷新操作。这一功能显著提升了用户体验,尤其是在查看实时信息更新时,如新闻、社交...

    安卓Android源码——ui开发类库示例源码.zip

    9. **Third-party UI库**:除了官方组件,还有很多第三方库增强了Android的UI开发能力,如Butter Knife(视图注入)、Retrofit(网络请求)、Glide(图片加载)、Picasso(图片加载)等。这些库简化了开发过程,提高...

    博客《Fragment详解之四——管理Fragment(2)》源码

    Fragment是Android应用开发中的一个重要组件,它是在Android 3.0(API级别11)引入的,用于在Activity中管理用户界面的模块化部分。Fragment的设计使得开发者可以在一个Activity中包含多个Fragment,甚至在一个...

    《Fragment详解之三——管理Fragment(1)》源码

    在Android开发中,Fragment是应用程序界面的一个模块化组件,它可以在Activity中添加、删除或替换。Fragment的概念引入是为了更好地支持大屏幕设备,如平板电脑,同时也增强了应用的灵活性和复用性。本篇将深入探讨...

    AndroidUI之Fragment

    在Android应用开发中,`Fragment`是Android UI设计的一个核心组件,它允许开发者在单一的Activity中构建可重用的模块化界面。`Fragment`的概念引入于Android 3.0 (API level 11),目的是为了更好地支持平板电脑等大...

    安卓Android源码——基于Fragment实现Tab的切换,滑出侧边栏.zip

    本项目“安卓Android源码——基于Fragment实现Tab的切换,滑出侧边栏.zip”显然是一个示例,演示了如何使用Fragment来创建一个多标签导航界面,并结合侧滑菜单实现更丰富的用户交互。 1. **Fragment基础**: - ...

    安卓Android源码——Fragment例子.zip

    在Android应用开发中,Fragment是Android SDK中的一个重要组件,它被设计用来支持多屏幕适配和复杂的用户界面。本资料“安卓Android源码——Fragment例子.zip”提供了关于Fragment的实战示例,帮助开发者深入理解其...

    AndroidStudio————实战演练——仿美团外卖菜单

    在本项目中,"AndroidStudio————实战演练——仿美团外卖菜单"是一个专注于使用Android Studio开发的应用程序实战案例,目标是创建一个类似于美团外卖的菜单功能。这个项目涵盖了多个Android开发的关键知识点,...

    安卓Android源码——UI界面源码.zip

    这个名为“安卓Android源码——UI界面源码.zip”的压缩包,很显然是一个包含Android用户界面(UI)相关源代码的资源集合。下面我们将详细探讨Android UI界面的构建原理以及可能包含的知识点。 1. **Android UI框架*...

    安卓Android源码——基于Fragment实现Tab的切换,滑出侧边栏.rar

    在安卓应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在单个活动中展示多个可交互的UI片段。此项目“安卓Android源码——基于Fragment实现Tab的切换,滑出侧边栏”是一个典型的Android应用程序,...

    安卓Android源码——Android ViewPager Fragment.zip

    在Android中,Fragment是Activity的一部分,它有自己的生命周期和UI。在ViewPager中,每个可见的Page实际上就是一个Fragment实例。当用户滑动时,ViewPager会自动创建或销毁相应的Fragment,以优化内存使用。 3. *...

    安卓Android源码——Fragment实现tab实例代码.zip

    在Android开发中,Fragment是构建动态、可重用的用户界面的一个重要组件。它允许开发者在单个活动中展示多个UI片段。在这个实例中,我们将会深入理解如何使用Fragment来实现tab切换的效果,这对于创建一个多页面的...

    安卓Android源码——Fragment例子.rar

    在Android应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在单个活动中分割界面,使得在不同屏幕尺寸和配置上实现灵活的布局成为可能。Fragment最初在Android 3.0 (API level 11) 引入,用于平板...

    Android-提高AndroidUI开发效率的UI库

    QMUI 是腾讯团队推出的一款专为提升 Android 项目 UI 开发效率而设计的开源库。这个库包含了丰富的组件和工具,旨在简化界面设计,优化代码结构,让开发者能够更高效地构建美观、一致的 Android 应用程序。下面将...

    使用fragment创建动态UI

    根据给定文件的信息,本文将详细介绍如何使用Android Fragment创建动态用户界面(UI)。Android Fragment是Android开发中的一个重要组件,它允许开发者在一个Activity中动态地组合多个片段来构成复杂的UI布局。 ...

    安卓Android源码——Fragment实现tab实例 代码.zip

    在这个"安卓Android源码——Fragment实现tab实例 代码.zip"中,我们将会探讨如何使用Fragment来构建一个具有Tab切换功能的应用。 1. **Fragment基本概念** - Fragment是一个可以添加到Activity中的UI模块,它可以...

Global site tag (gtag.js) - Google Analytics