• Android资源定义和使用


    声明:本文摘自 Google Android 开发者平台提供的官方文档 Android应用资源概览

    资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。

    • 资源类型
    目录资源类型
    animator/ 用于定义属性动画的 XML 文件。
    anim/ 用于定义渐变动画的 XML 文件。(属性动画也可保存在此目录中,但为了区分这两种类型,属性动画首选 animator/ 目录。)
    color/ 用于定义颜色状态列表的 XML 文件。请参阅颜色状态列表资源
    drawable/

    位图文件(.png.9.png.jpg.gif)或编译为以下可绘制对象资源子类型的 XML 文件:

    • 位图文件
    • 九宫格(可调整大小的位图)
    • 状态列表
    • 形状
    • 动画可绘制对象
    • 其他可绘制对象

    请参阅 Drawable 资源

    mipmap/ 适用于不同启动器图标密度的可绘制对象文件。如需了解有关使用 mipmap/ 文件夹管理启动器图标的详细信息,请参阅管理项目概览
    layout/ 用于定义用户界面布局的 XML 文件。请参阅布局资源
    menu/ 用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。请参阅菜单资源
    raw/

    需以原始形式保存的任意文件。如要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()

    但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/ 目录(而非 res/raw/)下。assets/ 中的文件没有资源 ID,因此您只能使用 AssetManager 读取这些文件。

    values/

    包含字符串、整型数和颜色等简单值的 XML 文件。

    其他 res/ 子目录中的 XML 资源文件会根据 XML 文件名定义单个资源,而 values/ 目录中的文件可描述多个资源。对于此目录中的文件,<resources> 元素的每个子元素均会定义一个资源。例如,<string> 元素会创建 R.string 资源,<color> 元素会创建 R.color 资源。

    由于每个资源均使用自己的 XML 元素进行定义,因此您可以随意命名文件,并在某个文件中放入不同的资源类型。但是,您可能需要将独特的资源类型放在不同的文件中,使其一目了然。例如,对于可在此目录中创建的资源,下面给出了相应的文件名约定:

    请参阅字符串资源样式资源更多资源类型

    xml/ 可在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。
    font/ 带有扩展名的字体文件(如 .ttf.otf 或 .ttc),或包含 <font-family> 元素的 XML 文件。如需详细了解作为资源的字体,请参阅 XML 中的字体
    • 创建资源

    例如创建字符串资源和颜色资源,可以在一个XML文件的 <resource></resource>中定义:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello</string>
        <string name="hi">@string/hello</string>
        <color name="red">#f00</color>
        <color name="hightlight">@color/red</color>
    </resources>
    可以为资源创建别名。上面资源 hi 就是 hello 的别名,highlight 是 red 的别名。
    不同资源一般分开定义。可以创建一个strings.xml 和 colors.xml文件分别保存字符串和颜色这两种资源。
    strings.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello</string>
        <string name="hi">@string/hello</string>
    </resources>

    colors.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="red">#f00</color>
        <color name="highlight">@color/red</color>
    </resources>
    • 访问应用资源

    可通过引用其资源 ID 来应用该资源。所有资源 ID 都在项目的 R 类中进行定义,该类由 aapt 工具自动生成。

    访问资源的方法有两种:在代码中访问和在其他XML文件中访问。

    在代码中访问资源语法

    [<package_name>.]R.<resource_type>.<resource_name>
    
    • <package_name> 是资源所在包的名称(如果引用的资源来自您自己的资源包,则不需要)。
    • <resource_type> 是资源类型的 R 子类。
    • <resource_name> 是不带扩展名的资源文件名,或 XML 元素中的 android:name 属性值(若资源是简单值)。

    例如对于字符串资源 hello,使用 R.string.hello 访问。

    常见代码中访问资源用法:

    // Load a background for the current screen from a drawable resource
    getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;
    
    // Set the Activity title by getting a string from the Resources object, because
    //  this method requires a CharSequence rather than a resource ID
    getWindow().setTitle(getResources().getText(R.string.main_title));
    
    // Load a custom layout for the current screen
    setContentView(R.layout.main_screen);
    
    // Set a slide in animation by getting an Animation from the Resources object
    flipper.setInAnimation(AnimationUtils.loadAnimation(this,
            R.anim.hyperspace_in));
    
    // Set the text on a TextView object using a resource ID
    TextView msgTextView = (TextView) findViewById(R.id.msg);
    msgTextView.setText(R.string.hello_message);

    在XML文件中访问资源语法

    @[<package_name>:]<resource_type>/<resource_name>
    • <package_name> 是资源所在包的名称(如果引用的资源来自相同资源包,则不需要)
    • <resource_type> 是资源类型的 R 子类
    • <resource_name> 是不带扩展名的资源文件名,或 XML 元素中的 android:name 属性值(若资源是简单值)。

    例如对于字符串资源 hello,使用 @string/hello 访问。

    在布局文件中访问资源用法:

    <?xml version="1.0" encoding="utf-8"?>
    <EditText xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:textColor="@color/red"
        android:text="@string/hello" />

    如果要访问系统资源,则要加上包名称:

    <?xml version="1.0" encoding="utf-8"?>
    <EditText xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:textColor="@android:color/secondary_text_dark"
        android:text="@string/hello" />


  • 相关阅读:
    Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)
    Educational Codeforces Round 79 (Rated for Div. 2)
    Codeforces Global Round 6
    Codeforces Round #608 (Div. 2)
    Codeforces Round #606 (Div. 2)
    Codeforces Round #603 (Div. 2)
    Educational Codeforces Round 77 (Rated for Div. 2)
    洛谷 P3805 【模板】manacher算法
    HDU 1671 Phone List [字典树]
    2019牛客暑期多校训练营(第一场)E.ABBA
  • 原文地址:https://www.cnblogs.com/weix-l/p/14528655.html
Copyright © 2020-2023  润新知