Android 构建用户界面与Android的碎片

http://www.developer.com/ws/android/development-tools/building-uis-with-android-fragments.html

虽然片段简化了编码的动态用户界面,使用它们的有一个小的开销成本。虽然你的布局将最终确定的代码片段显示,仍然需要做出决定,以确定是否要更新现有的片段,或推出一个新的活动,该片段应不存在于当前活动内容。

例如,下面的代码使用的findFragmentById()方法,以确定是否一个片段是在一个特定的布局。如果没有定义,推出一个新的活动,以显示该片段。

@Override
public void onListItemSelected(int index) {
  SampleViewerFragment imageViewer = (SampleViewerFragment) getSupportFragmentManager()
      .findFragmentById(R.id.image_viewer_fragment);

  if (imageViewer == null || ! imageViewer.isInLayout()) {
    Intent showImage = new Intent(getApplicationContext(), SampleViewerActivity.class);
    showImage.putExtra("index", index);
    startActivity(showImage);
  } else {
    imageViewer.update(index);
  }
}

您还需要的只是像以前的许多活动课,虽然不是所有人都可以使用每个设备上。有什么理由不来设计你的应用程序的片段,即使您目前的UI设计或目标设备不要求他们在这个时候。在未来,支持多种设备时,大多数应用程序可能会找到好的用例的片段,虽然游戏使用他们自己的框架,通过OpenGL实现与所有的用户界面可能是一个合理的异常。

由于现在用户交互的情况通常发生在,片段本身,则需要进行编码的逻辑,以确定是否启动一个活动中的与片段本身,或从父活动。无论哪种方式,需要一些通信之间的片段和其活性。任何片段可以调用getActivity()方法来确定它存在于Activity类的。从那里,调用活动的UI方法可以使片段,以确定更多的屏幕和布局。或者,更简单,片段可以只调用一个方法,在一个活动中,但此检查需求。通过一个侦听器对象通过添加一个回调,我们已经走了这条路线。定制的片断类和监听器的接口中定义的方法来实现在Activity类的。下面是一个完整的实施的ListFragment类:

public class SampleListFragment extends ListFragment {
  private int index = 0;
  private ListItemSelectedListener selectedListener;

  @Override
  public void onListItemClick(ListView l, View v, int position, long id) {
    index = position;
    selectedListener.onListItemSelected(position);
  }

  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setListAdapter(ArrayAdapter.createFromResource(getActivity(),
        R.array.image_titles, android.R.layout.simple_list_item_1));

    if (savedInstanceState != null) {
      index = savedInstanceState.getInt("index", 0);
      selectedListener.onListItemSelected(index);
    }
  }

  @Override
  public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("index", index);
  }

  @Override
  public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
      selectedListener = (ListItemSelectedListener) activity;
    } catch (ClassCastException e) {
      throw new ClassCastException(activity.toString()
          + " must implement ListItemSelectedListener in Activity");
    }
  }

  public interface ListItemSelectedListener {
    public void onListItemSelected(int index);
  }
}

正如你可以看到,这个方法很简单。适配器被设置在onActivityCreated()方法。的片段连接到一个活动时,监听器分配和使用活动在的onAttach()方法通过实例验证。当用户点击ListView中的一个项目,监听器被触发调用onListItemSelected() ,我们已经实现了在活动类。状态保存和恢复。

这里一个有趣的方面是savedInstanceState onActivityCreated()方法的使用。从表面上看,这看起来只是保存该项目正在查看和恢复,。当方向发生变化,实例数据保存,这部分代码被触发。如果方向从两个片段视图切换到单一片段视图,活性保持不变,这是活性,将只显示列表。但是,一旦触发此代码的意图,最终推出的浏览器活动被触发。所以,当你从风景到人像(在本例中)旋转的观众活动。按返回键的用户返回到列表中。让我们谈论的观众活动。

我们启动查看器活动,当观看者的片段中没有定义的当前活动。本次活动还必须了解观众的片段,它可能需要的任何配置。正如你看到的上面的代码清单,这个信息被发送到其他活动,使用的意图额外的参数传递。然后,此信息传递到片段在用同样的方式。下面是完整的代码的浏览器活动,在自己的屏幕上显示的片段:

public class SampleViewerActivity extends FragmentActivity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
    {
      finish();
      return;
    }

    setContentView(R.layout.image_viewer_activity);
    Intent launchingIntent = getIntent();
    int index = launchingIntent.getIntExtra("index", 0);
    SampleViewerFragment viewer = (SampleViewerFragment) getSupportFragmentManager()
        .findFragmentById(R.id.image_viewer_fragment);
    viewer.update(index);
  }
}

正如你所看到的,它只是一种方式来显示的观众片段。一个有趣的方面是,如果它的onCreate()方法被调用时,该设备已切换为横向模式,它完成后,将用户返回到上一个屏幕。只有当它被用于对景观的屏幕,这种方法效果很好。如果您选择使用它的在其他屏幕方向配置,这是必须更新以匹配。对于本示例,创建方向之间的平滑过渡。

观众片段是非常简单的。膨胀一个布局资源,并返回一个View对象作为onCreateView()方法被调用的结果。然后,它有一个执行的update()方法,你已经看到了几次。这是所有有给它。您可以查看在线代码库中的代码。

现在,当用户从纵向模式旋转为横向模式,屏幕切换屏幕(活动)模式下的双片段模式从单一的片段。您可以添加更多的替代布局,以更好地控制一下不同类型的屏幕上。例如,您可能只需要两个片段的布局时,大屏幕平板电脑。而不是把替代布局资源/布局土地目录,你可以把它的/布局的XLARGE土地目录。这是一个情况下,你需要更新的浏览器活动,完不成只是当屏幕方向改变。

在这里,我们看到的景观视野:

如果你改变方向的景观,你会看到相同的图像:

按返回按钮,返回到列表视图中:

结论
片段API,在Android 3.0推出,是一个伟大的API用于创建灵活,动态的用户界面。你已经学会了如何快速创建一个动态的用户界面,可以步行通过整个应用程序的外观和行为不同的屏幕方向和屏幕尺寸的片。因为这个功能是通过一个兼容库,任何应用程序为目标的A​​ndr​​oid 1.6及以后可以从这些改进中获益,以灵活的用户界面。这是一个简要的介绍片段API,其中有许多更有趣的功能,如过渡,后退堆栈,对话片段,以及更多。当目标的Andr​​oid 3.0及更高版本,有更多的功能的兼容性库中没有找到。

时间: 2024-10-05 17:15:04

Android 构建用户界面与Android的碎片的相关文章

Android开发入门(三)碎片简介 3.3 Fragments间的交互

通常情况下,一个activity可能包含一个或多个fragment,它们协同工作,组成一个连贯的UI界面.在这 种情况下,多个fragments之间的通信显得就很重要了.举个例子,一个activity包含左右两个fragment,左 侧的fragment包含了一个列表(比如新闻题目列表),当点击每个新闻题目的时候,右侧的fragment就会显 示这条新闻的详尽信息. 下面展示如何进行操作. Fragment1在整个activity的左侧, Fragment2在右侧. 1. fragment1.x

Android开发入门(三)碎片简介 3.1 动态添加Fragments

fragment的真正用处是在程序运行过程中动态地添加. 1. 新建工程. 2. res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"

3、Android构建仪表测试

不同于运行于JVM的本地单元测试,仪表测试运行于你的物理设备或虚拟机中.当你需要访问设备的信息(比如Context)或者使用真正的Android framework组件时(比如SharePreferences)时,你需要创建仪表测试.使用仪表测试同样可以帮助你减少mock代码.如果你需要,同样可以使用虚拟框架. 搭建测试环境 第一篇已经阐述 创建仪表测试类 你的仪表测试类风格类似Junit 4 测试类. 创建一个仪表测试类,需要在类定义前面添加 @RunWith(AndroidJUnit4.cl

Android构建Material Design应用详解

长久以来.Android的UI并不算美观,以至于很多IT公司在进行界面设计的时候,为了保证双平台的统一性,强烈要求Android端的界面风格必须与iOS端一致,我认为这里非常不合理的,同一操作系统中各个应用之间的界面统一性要远比一个应用在双平台的界面统一性重要的多,只有这样,才能给使用者带来更好的用户体验.为了解决这个问题,Google公司在2014年IO大会上推出了一套全新的界面设计语言--Material Design(材料设计语言),这次Google在界面设计上确实下足了功夫,一个词,好看

【Xamarin开发 Android 系列 4】 Android 基础知识

原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android?   Android一词的本义指"机器人",同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,而且不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件. Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备.目前尚未有统一中文

用Eclipse搭建Android开发环境并创建第一个Android项目(eclipse+android sdk)_Android

一.搭建Android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 1.安装和配置JAVA开发环境:   ①把准备好的Eclipse和JDK安装到本机上(最好安装在全英文路径下),并给JDK配置环境变量,其中JDK的变量值为JDK安装路径的根目录,如我的为:D:\Program Files\Java\jdk1.7.0_02: ②打开命令提示符(cmd),输入java -version命令,显示如下图则说明JAVA环境变量已经配置好了. 2.安装ADT插件:

用Eclipse搭建Android开发环境并创建第一个Android项目(eclipse+android sdk)

一.搭建Android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 1.安装和配置JAVA开发环境: ①把准备好的Eclipse和JDK安装到本机上(最好安装在全英文路径下),并给JDK配置环境变量,其中JDK的变量值为JDK安装路径的根目录,如我的为:D:\Program Files\Java\jdk1.7.0_02: ②打开命令提示符(cmd),输入java -version命令,显示如下图则说明JAVA环境变量已经配置好了. 2.安装ADT插件: ①打

[Android]中文API(三)android.account包下的那些类

账户管理 Android2.0中加入了一个新的包android.accounts,该包主要包括了集中式的账户管理API,用以安全地存储和访问认证的令牌和密码,比如,我们的手机存在多个账户,每个账户下面都有不同的信息,甚至每个账户都可以与不同的服务器之间进行数据同步(例如,手机账户中的联系人可以是一个Gmail账户中的通讯录,可联网进行同步更新).下面首先来看看android.accounts包提供了哪些功能,如表9-3所示. 表9-3  android.accounts包的功能描述 光看这些介绍

【Xamarin开发 Android 系列 7】 Android 结构基础(下)

原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前蹿*************   前一篇 我们从大概上知道了 Android的体系,我强调,我们的重点是Application,包括以后的开发 我们也都是开发Application,没有其他. 我们队APP有了大概了了接,知道 .apk的组成. 那么真正的app 包含哪些细节的东西呢,都是概念性的东