android getResources
A.
使用getResources()方法
getResources().getDimension(int id)
getDrawable(int id)
getXml(int id)
getResourceName(resid))
......
在一些情况中,必须在XML中使用资源(如,把一个图片用于Widget的可描画资源),但是可以在任何能够接收简单值的地方使用XML中的资源,如下列资源文件包含了一个颜色资源和字符串资源:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<colorname="opaque_red">#f00</color>
<stringname="hello">Hello!</string>
</resources>
在下面的布局文件中使用上述资源来设置文本的颜色和文本字符串:
<?xml version="1.0" encoding="utf-8"?>
<EditTextxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="@string/hello"/>
这种情况下因为是引用自己包中的资源,所以不需要指定包名。如果要引用系统资源,则需要包含包名,如:
<?xml version="1.0" encoding="utf-8"?>
<EditTextxmlns: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"/>
注意:应该在任何时候都使用字符串资源,以便应用程序能够针对其他语言进行本地化。
甚至能够使用XML中的资源来创建别名,例如,可以创建一个drawable类型的资源,这个资源是另一个drawable类型资源的别名:
<?xml version="1.0" encoding="utf-8"?>
<bitmapxmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/other_drawable"/>
引用样式的组件属性
引用样式资源的组件属性允许引用当使用的主题中的一个样式作为属性值。引用样式的组件属性属性通过把样式主题与当前主题所支持的各种标准进行匹配,从而达到定制UI元素外观的效果,而不是提供硬编码值。引用样式的组件属性实际上是,通过这个属性来使用在当前的主题中定义的样式。
要引用样式的组件属性的语法几乎与普通的资源格式完全相同,不同的是@被?所替代,并且资源类型部分是可选的。例如:
?[<package_name>:][<resource_type>/]<resource_name>
例如,以下示例说明了设置文本颜色的一个属性如何能够跟系统主题的“primary”文本颜色相匹配:
<EditTextid="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary"
android:text="@string/hello_world"/>
android:textColor属性指定了在当前主题中一个样式属性的名字。Android就会使用这个值,把android:textColorSecondary样式属性值作为widget中的android:textColor的值。因为系统资源工具了解在这个内容中所期望资源属性,所以不需要明确的指定类型(上例中完整的引用应该是?android:attr/textColorSecondary---可以忽略attr类型)
访问平台资源
Android包含很多标准资源,如样式、主题和布局等。要访问这些资源,就要使用完全的android包名来引用资源。如,Android在ListAdapter类中提供了用于列表项的布局资源:
setListAdapter(newArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));
在这个列子中,simple_list_item_1是平台给ListView对象中的项目定义的布局资源,可以使用它来替代自己要创建的用于列表项的布局。
B.
读取assert中的文件
资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以在 Activity 中通过
1 |
Context.getAssets().open(“sample.txt”) |
方法获取输入流。
注意:如果资源文件是文本文件则需要考虑文件的编码和换行符。建议使用UTF-8和Unix换行符。
例子:
//从assets 文件夹中获取文件并读取数据 public String getFromAssets(String fileName){ String result = ""; try { InputStream in = getResources().getAssets().open(fileName); //获取文件的字节数 int lenght = in.available(); //创建byte数组 byte[] buffer = new byte[lenght]; //将文件中的数据读到byte数组中 in.read(buffer); result = EncodingUtils.getString(buffer, ENCODING); } catch (Exception e) { e.printStackTrace(); } return result; }
2. WebView 加载assets目录下的html文件
资源文件 sample.html 位于 $PROJECT_HOME/assets/ 目录下,可以通过以下代码
WebView.loadUrl(“file:
///android_asset/sample.html”);
加载html文件。
3. getImageFromAssetFile
private Bitmap getImageFromAssetFile(String fileName){ Bitmap image = null; try{ AssetManager am = context.getAssets(); InputStream is = am.open(fileName); image = BitmapFactory.decodeStream(is); is.close(); }catch(Exception e){ } return image; }