Android官方入门文档[17]构建灵活的UI

简介: Android官方入门文档[17]构建灵活的UIBuilding a Flexible UI构建灵活的UI This lesson teaches you to1.

Android官方入门文档[17]构建灵活的UI


Building a Flexible UI
构建灵活的UI

 

This lesson teaches you to
1.Add a Fragment to an Activity at Runtime
2.Replace One Fragment with Another

You should also read
•Fragments
•Supporting Tablets and Handsets
这节课教你
1.在运行时新增一个片段给一个活动
2.用另一片段替换一个片段

你也应该阅读
•片段
•支持平板电脑和手持设备

Try it out
试试吧

Download the sample
FragmentBasics.zip
下载样本
FragmentBasics.zip

When designing your application to support a wide range of screen sizes, you can reuse your fragments in different layout configurations to optimize the user experience based on the available screen space.
当设计你的应用程序支持多种屏幕尺寸,您可以重用片段在不同的布局结构优化的基础上可用的屏幕空间的用户体验。

For example, on a handset device it might be appropriate to display just one fragment at a time for a single-pane user interface. Conversely, you may want to set fragments side-by-side on a tablet which has a wider screen size to display more information to the user.
例如,一个手持设备上也可能是适当的时间为一个单窗格的用户界面,来显示只有一个片段。反之,你可能要设置片段并排侧片有更宽的屏幕尺寸可显示更多的信息给用户。
 
Figure 1. Two fragments, displayed in different configurations for the same activity on different screen sizes. On a large screen, both fragments fit side by side, but on a handset device, only one fragment fits at a time so the fragments must replace each other as the user navigates.
图1的两个片段,用于在不同的屏幕尺寸相同的活性显示在不同的配置。在大屏幕上,这两个片段拟合并排,但一个手持设备上,只有一个片段装配在一个时间,以便用户导航片段必须相互取代。

The FragmentManager class provides methods that allow you to add, remove, and replace fragments to an activity at runtime in order to create a dynamic experience.
该FragmentManager类提供了一些方法,使您可以添加,删除和替换片段活动在运行时,以创造一个动态的体验。

 

Add a Fragment to an Activity at Runtime
在运行时新增一个片段给一个活动


--------------------------------------------------------------------------------

Rather than defining the fragments for an activity in the layout file—as shown in the previous lesson with the <fragment> element—you can add a fragment to the activity during the activity runtime. This is necessary if you plan to change fragments during the life of the activity.
而不是限定的片段为活动在布局文件中上一课与<片段>示元件可以活动运行期间添加到片段的活性。如果你计划活动的生命周期内改变片段,这是必要的。

To perform a transaction such as add or remove a fragment, you must use the FragmentManager to create a FragmentTransaction, which provides APIs to add, remove, replace, and perform other fragment transactions.
为了进行交易,如添加或删除片段,则必须使用FragmentManager创建FragmentTransaction,它提供的API来添加,删除,替换,以及执行其他片段交易。

If your activity allows the fragments to be removed and replaced, you should add the initial fragment(s) to the activity during the activity's onCreate() method.
如果你的活动可以使片段被删除,取而代之,你应该活动的OnCreate()方法中添加初始片段活动。

An important rule when dealing with fragments—especially when adding fragments at runtime—is that your activity layout must include a container View in which you can insert the fragment.
一个重要的规则时的片段,尤其是在加时的片段与处理运行时,是你的活动布局必须有一个容器视图,可以在其中插入片段。

The following layout is an alternative to the layout shown in the previous lesson that shows only one fragment at a time. In order to replace one fragment with another, the activity's layout includes an empty FrameLayout that acts as the fragment container.
下面的布局是一种替代上一课中所示的布局只显示一次一个片段。为了取代一个片段与另一种,活动的布局包括一个空的FrameLayout充当片段容器。

Notice that the filename is the same as the layout file in the previous lesson, but the layout directory does not have the large qualifier, so this layout is used when the device screen is smaller than large because the screen does not fit both fragments at the same time.
请注意,文件名是一样的,在上一课布局文件,但布局目录没有大的限定符,所以这种布局时使用的设备的屏幕比large小,因为屏幕在同一时间不适合两个片段。

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" />

Inside your activity, call getSupportFragmentManager() to get a FragmentManager using the Support Library APIs. Then call beginTransaction() to create a FragmentTransaction and call add() to add a fragment.
在你的活动,调用getSupportFragmentManager()来获得使用支持库API的FragmentManager。然后调用的BeginTransaction()来创建一个FragmentTransaction并调用增加()来添加一个片段。

You can perform multiple fragment transaction for the activity using the same FragmentTransaction. When you're ready to make the changes, you must call commit().
可以使用相同的FragmentTransaction活性执行多个片段事务。当你准备好了做出改变,你必须调用commit()。

For example, here's how to add a fragment to the previous 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 a new Fragment to be placed in the activity layout
            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();
        }
    }
}


 

 

Because the fragment has been added to the FrameLayout container at runtime—instead of defining it in the activity's layout with a <fragment> element—the activity can remove the fragment and replace it with a different one.
因为该片段已被添加了<fragment>元素的活性定义它在活动的布局可以删除片段,并将其与不同的一个replace到的FrameLayout容器在运行时,代替。

 

Replace One Fragment with Another
用另一片段替换一个片段


--------------------------------------------------------------------------------

The procedure to replace a fragment is similar to adding one, but requires the replace() method instead of add().
步骤替换的片段是类似于添加一种,但需要replace()方法,而不是add()。

Keep in mind that when you perform fragment transactions, such as replace or remove one, it's often appropriate to allow the user to navigate backward and "undo" the change. To allow the user to navigate backward through the fragment transactions, you must call addToBackStack() before you commit the FragmentTransaction.
请记住,当你执行片段交易,如替换或删除一个,它往往是适当的,允许用户浏览后退,“撤销”的转变。为了使用户能够通过碎片交易向后导航,你必须调用addToBackStack(),您提交FragmentTransaction之前。

Note: When you remove or replace a fragment and add the transaction to the back stack, the fragment that is removed is stopped (not destroyed). If the user navigates back to restore the fragment, it restarts. If you do not add the transaction to the back stack, then the fragment is destroyed when removed or replaced.
注意:当您删除或替换片段和交易添加到后面的堆栈,即去掉停止片段(不被破坏)。如果用户导航回恢复片段,将重新启动。如果不事务添加到后面栈,然后取出或替换时,该片段被破坏。

Example of replacing one fragment with another:
用另一个替换一个片段的例子:

// 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();


 

 

The addToBackStack() method takes an optional string parameter that specifies a unique name for the transaction. The name isn't needed unless you plan to perform advanced fragment operations using the FragmentManager.BackStackEntry APIs.
该addToBackStack()方法接受一个可选的字符串参数,指定一个唯一的名称进行交易。除非你打算执行使用FragmentManager.BackStackEntry API的先进片段操作的名称是不需要的。

Next: Communicating with Other Fragments
下一页:通信与其它片段

本文翻译自:https://developer.android.com/training/basics/fragments/fragment-ui.html

目录
相关文章
|
5天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
30天前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
24天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
48 5
|
24天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
42 2
|
25天前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
28 1
|
29天前
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
30天前
|
人工智能 Android开发
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
61 1
|
1月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
46 4
|
21天前
|
XML IDE Java
安卓应用开发入门:从零开始的旅程
【10月更文挑战第23天】本文将带领读者开启一段安卓应用开发的奇妙之旅。我们将从最基础的概念讲起,逐步深入到开发实践,最后通过一个简易的代码示例,展示如何将理论知识转化为实际的应用。无论你是编程新手,还是希望扩展技能的软件工程师,这篇文章都将为你提供有价值的指导和启发。
28 0
|
1月前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
110 3