Android training(1)-Building a Dynamic UI with Fragments(用碎片创造一个动态的UI)(A)

来源:互联网 发布:php.ini文件找不到 编辑:程序博客网 时间:2024/04/29 17:50

http://download.csdn.net/detail/miao033009/8649105 demo下载地址

为了在android上面创建动态的或者复合面板型的用户UI,你需要把你的组件或者活动行为放到一个模块中,这个模块便可以进出Activity。Fragment类可以帮助你创建这种模块,他表现的就想一个内嵌的Activity,他拥有自己的布局以及自己的生命周期。

当碎片有了自己的布局后,他就可以和其他的碎片自由组合,从而为你的Activity提供不同屏幕尺寸下的布局结构。(比如屏幕小,可以显示一个碎片,屏幕大了便可以显示两个或者更多)。

下面的demo主要讲了如何用碎片创造一个动态的用户体验,并且优化你的程序在多种屏幕下的用户体验。

A:创建一个碎片

你可以把碎片看作是Activity中的一个片段,拥有自己的生命周期,拥有自己的输入事件,可以添加到或者删除从你运行的Activity中,(就像一种“子Activity”,你可以在所有的Activity中重复使用)。通过支持库,你可以使用碎片,并且保证就算在1.6android版本下依然兼容。

注意:如果你确定你的程序API为11或者更高,你就不需要使用支持库了,可以直接用标准库框架里面的碎片以及相关的API。这个demo用到了支持库,这个库有特殊的名字并且有时可能和标准库中的API有点不同。

在学习之前,你必须知道怎么使用支持库:

a:打开你的SDK Manager。

b:找到extras目录。

c:选中Android support library 项。

d:点击Install packages...按钮。

下载完成后,支持库位于<sdk>/extras/android/support/文件夹下。

e:在你要使用支持库的项目的根目录创建libs文件夹。

f:并且把之前下载好的.jar 支持库文件拷贝到libs文件夹中。

g:右键jar文件 选择Build Path ->Add to Build Path。

现在可以正式开始学习创建一个碎片(Fragment)了。

A.a 创建一个碎片类

一个碎片类继承自Fragment,然后复写他的一些关键生命周期方法,并在其中添加你应用的逻辑,就和你使用Activity时一样。

与Activity不同的是,在Fragment中你需要在onCreateView()中定义他的布局,实际上,你只要复写这一个方法就可以让你的Fragment运行了。下面就是一个拥有自己布局的简单Fragment:

import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.ViewGroup;public class ArticleFragment extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,        Bundle savedInstanceState) {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.article_view, container, false);    }}

和Activity一样,Fragment也应该复写其他的生命周期方法,这样可以让你随着他被添加到或者删除从Activity时,或者在Activity的生命周期切换时,改变他自己的状态。例如,当Activity执行isPause()时,Activity中的所有Fragment也都将执行自己的isPause()。

A.b 通过xml将Fragment添加到Activity中

因为Fragment是可重复利用,模块化的UI控件,每一个Fragment的实例必须包含在FragmentActivity中,我们可以通过把每个Fragment放到Activity的布局文件中完成这个目标。

注意:FragmentActivity是支持库中的一个特殊的Activity用来在API低于11的系统下处理Fragment,如果应用的最小API为11或者更高,那么就用常规的Activity就可以了。

下面是一个例子,在一个Activity的布局中添加了两个Fragment,并且在屏幕被认为是“大”的时候显示。用large这个限定词说明res/layout-large/news_articles.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="fill_parent"    android:layout_height="fill_parent">    <fragment android:name="com.example.android.fragments.HeadlinesFragment"              android:id="@+id/headlines_fragment"              android:layout_weight="1"              android:layout_width="0dp"              android:layout_height="match_parent" />    <fragment android:name="com.example.android.fragments.ArticleFragment"              android:id="@+id/article_fragment"              android:layout_weight="2"              android:layout_width="0dp"              android:layout_height="match_parent" /></LinearLayout>
然后给你的Activity添加布局

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);    }}
注意:如果是通过xml添加Fragment到Activity中的,那么在程序运行时将不可以把他从Activity中移除,如果你想在和用户交互的过程中添加或者移除Fragment到Activity,那么你必须在Activity首次启动时添加他,将在下面介绍这种方法。



原创粉丝点击