资源访问的方法总章

Update time:2019-3-1 Author:要你命三千又三千 type:学习笔记

问题一:如何资源如何生成R类引用?

aapt 会生成 R 类,其中包含您的 res/ 目录中所有资源的资源 ID。 每个资源类型都有对应的 R 子类(例如,R.drawable 对应于所有可绘制对象资源),而该类型的每个资源都有对应的静态整型数(例如,R.drawable.icon)。这个整型数就是可用来检索资源的资源 ID。

问题二:如何在代码中访问res中资源?

[< package_name>.]R.< resource_type>.< resource_name>任何资源最终可以通过访问

访问原始文件
尽管并不常见,但您的确有可能需要访问原始文件和目录。如果确有需要,则将您的文件保存在 res/ 中不起作用,因为从 res/读取资源的唯一方法是使用资源 ID。您可以改为将资源保存在 assets/ 目录中。
保存在 assets/ 目录中的文件没有资源 ID,因此您无法通过 R 类或在 XML 资源中引用它们。您可以改为采用类似普通文件系统的方式查询 assets/ 目录中的文件,并利用 AssetManager 读取原始数据
不过,如果只需要读取原始数据(例如视频文件或音频文件)的能力,则可将文件保存在 res/raw/ 目录中,并利用 openRawResource() 读取字节流。

总结:
问题:如何解决raw中的文件在某些情况下需要访问?
问题产生的原因:

无法将文件写入原始文件夹。它是只读的。准确地说,你无法动态修改“Res”文件夹中包含的任何内容。使用openRawResource()进行读取原始数据。

解决方法:将数据放大assets/中,使用AssetManager来处理,即可解决。

问题三:在xml 访问资源文件的方式?

@[< package_name>:]< resource_type>/< resource_name>来访问xml

  1. 要引用系统资源,您需要加入包名称
<?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" />

问题四:如何使用内建样式资源

?[<package_name>:][<resource_type>/]<resource_name>

样式属性资源在当前应用的风格主题中引用某个属性的值
资源访问的方法总章

问题五:如何应用内的样式属性

步骤一:自定属性

<resources>
    <attr  name="btn_bg" format="color"></attr>
</resources>

步骤二:
valuse/style.xml中新建自定义样式

 <style name="BlueTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="btn_bg">#0000ff</item>
  </style>
  <style name="RedTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="btn_bg">#ff0000</item>
  </style>

步骤三:

<Button
    android:background="?attr/btn_bg"   //这里
    android:id="@+id/btn_login"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="登录" />

这里可以使用?attr/可以省略。

问题六:如何实现自定义属性

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyTextView">
        <attr name="color" format="color" />
        <attr name="size" format="dimension" />
    </declare-styleable>
</resources>

属性的类型

reference// 资源类型,通常是@开头,例如@+idxx,@idxx
string// 字符串类型,通常是文字信息
dimension// 浮点类型,通常是尺寸度量,单位有很多px,dp,sp等
color// 颜色类型,通常是颜色16进制代码,支持ARGB
boolean// 布尔类型,true和false
enum// 枚举类型,通常是代表这个属性提供了几种值来进行选择,并且只能选择这几种中的一个
flag// 与enum使用基本没有区别
integer// 整数类型,通常是整数

资源访问的方法总章
自定义属性的引用方式。
java中的引用方式

TypedArray t = getContext().obtainStyledAttributes(attrs,
                R.styleable.MyTextView);
        int textColor = t.getColor(R.styleable.MyTextView_color, Color.BLACK);
        float textSize = t.getDimension(R.styleable.MyTextView_size, 10);

参考自定义View:https://www.jianshu.com/p/87fcceed1f8f