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及更高版本,有更多的功能的兼容性库中没有找到。

相关文章
|
4天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
2天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
2天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第24天】随着移动开发技术的不断演进,提升应用性能和用户体验已成为开发者的核心任务。在Android平台上,Kotlin语言凭借其简洁性和功能性成为主流选择之一。特别是Kotlin的协程功能,它为异步编程提供了一种轻量级的解决方案,使得处理并发任务更加高效和简洁。本文将深入探讨Kotlin协程在Android开发中的应用,通过实际案例分析协程如何优化应用性能,以及如何在项目中实现协程。
|
3天前
|
Android开发
Android构建系统:Android.mk(2)函数详解
Android构建系统:Android.mk(2)函数详解
12 1
|
8天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
7 0
|
8天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
12 0
|
API 开发工具 Android开发
4.0、Android Studio配置你的构建
Android构建系统编译你的app资源和源码并且打包到APK中,你可以用来测试,部署,签名和发布。
1116 0
|
4天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
27天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0