Android从零开始:如何在应用程序中使用资源

您开发的任何应用程序都必须包括某种本地资源和值,例如字符串,图像资产(即使只是应用程序图标)和颜色。 在本教程中,您将了解Android中的资源以及如何在应用程序中使用它们来向用户显示内容,处理大小不同的设备以及通过各种语言支持用户。

1.向项目添加资源

在Android Studio中创建项目时,项目中会为您提供两个主要目录,分别是javares的源文件。 res代表 资源,顾名思义,它包含项目的资源。 在Android的背景下,资源就是 代表可以在屏幕上绘制的东西的文件,类的布局文件或可以在您的应用中访问的值,例如字符串或彩色十六进制值。 在本部分中,您将了解应用程序可用的各种资源。

资源类型

为了在Android项目中使用资源,您需要将它们组织到res文件夹中的子目录中。 标准Android项目的资源目录结构可能如下所示:

Android中的资源目录示例

Android资源系统支持的目录名称数量有限,在继续开发Android应用程序时,有必要了解它们。 让我们更详细地了解它们。

  • animator动画师资源目录可以包含XML文件,这些XML文件为应用程序中的View对象定义动画 。 无需在Java代码中一遍又一遍地定义动画,而是可以在需要使用特定动画的每个位置导入动画设计器XML文件。 如果您决定稍后更改该动画,则可以在应用程序中的一个位置(而不是多个位置)进行更改。
  • color :尽管您可以将color hex值保存在values目录中,但是color目录用于存储将状态信息与特定 color相关联的XML文件。 如果您需要在触摸时更改View文本或背景的颜色以向用户提供反馈,这将非常有用。
  • drawable :如果您的应用需要本地图像资源(例如JPG和PNG),则需要将其放置在drawable文件夹中。 您也可以在此处放置定义形状和矢量可绘制对象的 XML文件,或用代码绘制的图像。
  • mipmap :类似于drawable, mipmap目录接受位图项,但是它专门用于应用启动器图标。 这是必要的,因为Android使用的图像尺寸比设备通常用于启动器图标的尺寸大。
  • layoutlayout目录包含用于定义应用程序用户界面的XML文件。
  • 菜单 :菜单XML文件用于定义操作栏和导航菜单及子菜单 。 这些资源放置在菜单资源目录中。
  • rawraw目录用于存储应用程序的任意原始文件,例如音频,视频和文本文件。 这提供了一种访问文件的简便方法,尽管如果您需要访问原始文件名或目录层次结构,则应考虑将原始文件放置在Android的资产目录中。
  • xml :此目录包含Android用来执行各种任务的任意XML文件,例如定义搜索配置或外部功能(例如使用Android Auto)

价值观

尽管上面的可用资源目录列表很长,但是还有一个目录,您将作为Android开发人员经常使用该目录,即values目录。 values目录可以包含许多XML文件,这些XML文件包含在应用程序中使用的简单值,包括:

  • arrays :可以读取到您的应用程序中的简单数组对象
  • colors :已命名的颜色十六进制值,可以在您的应用中的多个位置使用。
  • dimens尺寸可以定义与Android中尺寸有关的任何内容,包括文本和填充尺寸。
  • integers :如果需要在应用程序中使用特定的整数,则可以将它们存储在integers资源文件中,以便在开发过程中易于查找和更改。
  • 字符串 :在您构建的任何Android应用程序中,字符串都是必需的。 您可以将字符串保留在strings.xml值文件中,而不是在代码库中散布它们。
  • 复数 :类似于字符串,当将数字传递给检索函数时, 复数允许您提供备用字符串。 这可以处理字符串量词应根据其表示的项目数进行更改的情况。
  • 样式 :您构建的任何应用都需要一致的外观,这可以通过使用styles.xml文件来实现。 使用样式,您可以覆盖组件的默认外观并预定义可以与布局文件中的不同View对象关联的属性。

如您所见,Android中的资源框架非常广泛。 在继续开发应用程序时,您会发现资源文件和值的使用越来越多,从而使开发和维护应用程序变得更快,更容易。

2.访问资源

现在您知道了如何向应用程序中添加资源,您需要能够访问它们。 应用程序中存储的所有资源都会自动分配一个可识别的名称,该名称由资源类型(例如drawablelayout )以及应用程序R文件中的ID组成。 R文件是由Android Asset Packaging工具或aapt在编译期间生成的文件。 此生成的名称可用于访问Java代码或另一个XML资源文件中的资源。

用Java访问资源

Android中的许多对象都是在考虑资源标识符的情况下构建的,并接受资源的ID才能使用该资源。 例如,通过传入R drawable id来设置ImageView以使用可绘制资源。

mImageView.setImageResource(R.drawable.test);

同样,可以通过传入文件的R id来创建MediaPlayer对象(用于播放音频或视频媒体)以播放原始媒体文件。

MediaPlayer.create(getActivity(), R.raw.sample_media)

尽管大量对象都接受资源ID,但有时您仍想在代码中检索原始资源。 您可以使用Android的Context对象中可用的getResources()方法来执行此操作。 这将返回带有多个用于访问本地应用程序资源的方法的Resources对象,例如getColor()getDrawable()

getResources().getColor(R.color.colorPrimary);
getResources().getDrawable(R.drawable.kittens);

访问XML资源

在大多数情况下,使用资源时,资源将位于其他XML文件中。 通过定义在应用程序的各个位置使用的颜色,样式,文本或任何其他资源,它允许您更改一个值并将其填充到整个应用程序中,从而简化了可维护性。 幸运的是,您可以通过将ID传递给需要资源ID的字段来访问XML属性中的资源。

<TextView
    android:id="@+id/tv_test"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:text="@string/title"
    style="@style/TitleStyle"/>

3.提供替代资源

您构建的几乎每个应用程序都应处理各种设备大小,配置和用户语言。 通过在资源目录的末尾附加特定的限定词,Android系统会在满足某些条件时对这些资源进行优先级排序。

屏幕密度

为避免像素化,应为您的应用创建的位图资产应使用特定的像素密度。 通过将-ldpi-mdpi-hdpi和其他限定符附加到目录文件夹中(如本文开头的图像中的mipmap所示) ,Android系统可以知道哪些资产可用于运行您应用程序的任何特定设备。

用户语言

您可以通过在目录名称的末尾附加语言代码来为应用支持的每种语言创建单独的值目录,例如,法语和西班牙语的values-frvalues-es

当用户将其语言设置为这些语言之一时,系统将向用户提供新资源目录中的任何值,而不是默认值。 这对于用正确的翻译替换字符串资源很有用。

平板电脑和方向支持

您可以将-land附加到资源目录,以在设备处于横向模式时使这些值覆盖默认值。 还可以定义一个设备的最小宽度为一个资源目录通过附加-sw600dp为中等大小的片剂(如的Nexus 7)覆盖,以便支持片剂的默认和-sw720dp对于较大的片剂。

结论

您构建的任何应用程序都将包含资源,并了解如何访问它们并支持各种设备配置,这对于成为Android开发人员来说是重要的组成部分。 在本文中,您学习了应用程序中可以包含哪种资源,如何使用Java和XML访问它们以及在特定情况下如何覆盖资源。

翻译自: https://code.tutsplus.com/tutorials/android-from-scratch-how-to-use-resources-in-an-application--cms-26041

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值