`

【Android开发之UI】建立一个灵活的用户界面

阅读更多

 

原文自:http://android.eoe.cn/topic/ui

 

当你设计支持广泛屏幕大小的应用时,你可以在不同的布局配置中重用你的frament,在可用的屏幕空间基础上优化用户体验。
例如,在手持设备上,对于一个单窗口的用户界面来说同一时间可能只适合显示一个fragment。反之,你可能想在尺寸更大平板上并排设置更多的fragment以显示更多的信息给用户.

如上图:两个fragment,同一个activity,不同的配置,显示在不同的屏幕尺寸上。在大的屏幕中,两个fragment可以并排的占用屏幕,但是在手持设备中,在同一时间,仅仅只能填充一个fragment,两个fragment必须随着用户的操作相互替换。
为创建一个动态的体验,FragmentManager类提供了方法允许你在activity运行时对fragment进行添加,移除,和替换。

Add a Fragment to an Activity at Runtime


相比上节课提到的使用标签在布局文件中为activity定义一个fragment组件,更好的方式是在activity运行时添加fragment。如果你想在activity的生命周期中变换fragment的话就必须这样做。

执行类似添加或者删除fragment的事务,你必须使用FragmentManager创建一个FragmentTransaction,它提供了添加,删除以及其他fragment事务的API。
如果你的activity允许移除或者替换fragment,你应该在activity的onCreate())方法中添加初始化的fragment。
在你处理fragment(尤其是你在运行时添加的那些)的时候,有一个很重要的规则就是你的fragment放置位置的布局中必须有一个视图容器。
下面这个布局是上节课在同一时间只显示一个fragment布局的替代品。为了将一个fragment替换成另一个,这个activity布局包含了一个空的FrameLayout作为fragment容器。
注意这个文件名跟上节课的布局文件名字一样,但是这个布局并没有指定在“高分辨率”目录中(译者注:请注意下面xml的路径,res/layout这个layout文件夹并没有像上节课提到的是一个layout-large文件夹),如此这个布局是用在比large更小的设备屏幕上,因为这个屏幕不能在同一时间充满两个fragment。
res/layout/news_articles.xml:

1
2
3
4
    <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中,使用Support LibraryAPI,调用getSupportFragmentManager()可以得到一个FragmentManager对象,之后调用beginTransaction去创建一个FragmentTransaction对象,再调用add()方法即可添加一个fragment。
你可以对activity使用同一个FragmentTransaction对象去执行多个fragment事务,当你确定要做这些操作时,你必须调用 commit()方法。
例如,以下代码演示怎样添加一个fragment到前面的layout:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    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替换当前(Replace One Fragment with Another)* ##


替换一个fragment的过程跟添加差不多,但是需要的是replace()方法,而不是add()方法。
需要注意的是,当你执行fragment事务时,比如替换或者删除一个fragment。允许用户“后退”或者“撤销”改变通常是比较合适的做法。为了让用户可以通过fragment事务“后退”,你必须在你提交fragment事务之前调用addToBackStack()方法

注意:当你移除或者替换fragment且将事务添加到堆栈中时,被移除的fragment是被停止了(没有消亡)。如果用户导航回来重新加载这个fragment,它将会重新启动;如果你没有把事务加入到堆栈中,当fragment被删除或者替换时,这个fragment也就消亡了;

以下使用fragment替换另一个的例子:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
    // 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()方法有一个可选的字符串参数,用来指定事务的唯一名称。这个名称不是必须的除非你打算使用FragmentManager.BackStackEntry API执行更高级的fragment操作。

0
0
分享到:
评论

相关推荐

    android开发基础

    3.Android用户界面UI元素之Layout 4.Android用户界面UI元素之Widget(1) 5.Android用户界面UI元素之Widget(2) 6.Android用户界面UI元素之Widget(3) 7.Android用户界面UI元素之Widget(4) 8.Android用户界面UI元素之...

    精彩绝伦的Android UI设计:响应式用户界面与设计模式.pdf

    《精彩绝伦的Android UI设计:响应式用户界面与设计模式》是一本深入探讨Android用户界面(UI)设计的专业书籍,由莱特曼所著,机械工业出版社出版。该书被业界誉为Android UI设计的经典之作,是Amazon的五星级畅销...

    《老罗Android开发视频教程》入门_布局_ui控件_web_http_jdbc等源码

    通过学习和实践其中的源码,你可以建立起扎实的Android开发基础,为成为一名合格的Android开发者打下坚实的基础。同时,源码的实践将加深你对各个知识点的理解,提升你的编程能力。无论你是初学者还是有一定经验的...

    Android UI 简介

    通过以上步骤,我们了解了Android UI的基础概念、设计原理及开发环境的搭建,并初步实践了如何创建一个简单的UI界面。后续可以根据实际需求,进一步学习复杂的布局设计、动态界面更新等高级功能。

    Android开发教程基础版 Android中文开发教程

    《Android开发教程基础版》是一本专为初学者设计的...以上只是《Android开发教程基础版》的部分核心知识点,通过深入学习并实践这些内容,开发者可以建立起扎实的Android开发基础,为进一步提升和进阶打下坚实基础。

    android ui基础教程

    《Android UI基础教程》是Jason Ostrander撰写的一本深入探讨Android用户界面设计与开发的专业书籍,由Peachpit Press出版。本书旨在帮助读者掌握设计美观、高效且用户友好的Android应用界面所需的各项技能和知识,...

    Android开发从入门到精通【视频教程+课程源码】.rar

    在Android开发领域,掌握基础知识是至关重要的,而这套"Android开发从入门到精通【视频教程+课程源码】"提供了一条系统学习的路径。它不仅包括了详细的视频讲解,还有配套的源代码,旨在帮助初学者从零开始,逐步...

    Android UI设计基础补充_android_AndroidUI设计_

    在Android开发领域,UI设计是至关重要的组成部分,它直接影响到用户对应用的第一印象以及使用体验。本篇文章将深入探讨Android UI设计的基础知识,包括页面布局设计和控件属性设计两个核心方面。 首先,我们来谈谈...

    Android开发基础教程

    Android应用的用户界面(UI)设计通常通过XML文件完成。了解各种UI组件,如TextView、EditText、Button、ImageView等,并掌握如何在布局文件中使用它们,可以创建出美观且功能齐全的界面。 六、活动管理与应用生命...

    一个demo让你学会所有ui控件

    在Android开发中,UI(用户界面)控件是构建应用程序不可或缺的部分。它们是用户与应用交互的桥梁,决定了应用的视觉样式和交互体验。本文将深入讲解如何通过一个名为"AndroidBaseDemo"的示例项目学习所有基本的...

    实验2-Android-应用的界面开发(1).doc

    实验2-Android应用的界面开发主要关注Android应用的基础构建、用户界面(UI)的设计以及不同方式来控制界面组件。在Android开发中,UI是应用程序与用户交互的关键部分,因此理解和熟练掌握界面设计方法至关重要。 ...

    android开发入门与实践

    总之,Android开发入门与实践是一个系统的过程,涵盖了从创建项目、设计用户界面到实现交互逻辑等多个方面。通过深入学习2、3、4这三章的内容,初学者可以建立起坚实的Android开发基础,为进一步深入学习和开发复杂...

    android-UI.zip_android

    这份“android-UI.zip”文件包含了一份名为“android常用控件大全.docx”的文档,这显然是一个关于Android用户界面(UI)组件的详细教程,非常适合初学者学习。在这里,我们将深入探讨Android UI开发中的关键知识点...

    《Android开发与实践》 PDF

    总的来说,《Android开发与实践》这本书提供了从基础到进阶的全方位Android开发知识,结合理论与实践,帮助读者建立起扎实的Android开发基础,提升实战技能。通过阅读并实践书中的案例,开发者可以逐步成长为一名...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    008集-android开发常用术语

    通过学习这些术语,你可以对Android开发有一个基础的认识。视频教程"008集-android开发常用术语"将深入探讨这些概念,帮助初学者快速上手。记得实践是检验理解的最好方式,所以理论学习后,动手操作才能真正掌握这些...

    android开发入门与实践体验-光盘代码

    在Android开发领域,入门与实践是提升技能的关键步骤。"Android开发入门与...以上知识点覆盖了"Android开发入门与实践体验"的主要内容,通过实际操作"光盘代码"中的示例,开发者能够逐步建立扎实的Android开发基础。

    android 基础开发实例

    "基础"部分涵盖了Android开发的基本元素,如活动(Activity)、意图(Intent)、布局(Layout)和用户界面(UI)。活动是应用程序的主要工作单元,负责处理用户交互;意图用于在不同组件间通信,如启动一个新的活动...

Global site tag (gtag.js) - Google Analytics