Android——用户资源访问

来源:互联网 发布:淘宝主页装修教程 编辑:程序博客网 时间:2024/06/14 23:05

字符串资源

字符串资源文件位于res/values目录下,根元素是标记,在该元素中使用<string></string>标记定义各个字符串,其次为标记设置name属性,来指定字符串的名称。

注意:资源文件名不能是大写字母,必须是小写字母a-z开头,由小写字母a-z,0-9或者下划线"_"组成的。

在Activity中使用getResources()方法获取资源管理器,然后使用它的get方法获取对应的资源文件,如String字符串,用getString,字符串数组使用getArray。

XML中的使用

<TextViewandroid:id="@id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/app_name"/>

颜色资源

定义颜色资源

颜色资源文件位于res/values目录下,根元素是标记,在该元素中,使用标记定义的各颜色,其实为标记设置,指定颜色的名称。

颜色值的定义说明

#RGB使用红、绿、蓝三原色的值来表示颜色,其中红、绿、蓝均采用0-f来表示,如要表示红色可以使用#ff0

#ARGB:使用透明度以及红绿蓝三原色来表示颜色,其中透明度,红,绿和蓝均采用0-f来表示,如,要表示半透明的红色,可以使用#8f00

#RRGGBB, 使用红,绿,蓝三原色的值来表示颜色,与 #RGB 不同的是这里的红绿蓝使用00-ff来表示,如要表示蓝色可以使用 #0000ff`

#AARRGGBB 使用透明度及红绿蓝三原色来表示颜色,其中透明度、红、绿、蓝均采用00-ff来表示。例如,要表示半透明的绿色可以使用 #8800ff00, #00 表示完全透明 ff表示完全不透明

在XML中配置

<resources>    <color name="blue">#ff0000</color></resources>

Java代码中使用

getResources().getColor(R.color.title);

在XML中使用

<TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/app_name"android:textColor="@color/blue"/>

尺寸资源

尺寸资源也是进行Android应用开发时,比较常用的资源,通常用于设置文字的大小,组件的间距等。
为了要让程序拥有更好的屏幕适配能力,在指定控件和布局大小的时候最好使用match_parent和wrap_content,尽量避免将控件的宽和高设定一个固定的值。不过在有些情况下,仅仅使用match_parent和wrap_content确实无法满足我们的需求,这时就要给控件的宽或高指定一个固定的值。

单位说明

px(pixels,像素):每个px对应屏幕的一个点。例如320*480的屏幕在横向有320个像素,纵向有480个像素。

In(Inches,英寸):标准长度单位。每一英寸等于2.54厘米。例如,形容手机屏幕大小,经常说,3.2(英)寸,4寸,都是指这个单位,如果手机的屏幕是4英寸,表示手机的屏幕(可视区域)对角色长度是4*2.54=10.16厘米。

pt(points,磅):屏幕物理长度单位,1/72a英寸。

Dip或者dp(设置独立像素):一种基本屏幕密度的抽象单位。在每英寸160点显示器上,1dip=1px——但随着屏幕密度的改变,dip和px的换算也会发生改变。

sp(比例像素):主要处理字体的大小,可以根据用户字体的大小首选项进行缩放。

Mm(Millimeters,毫米):屏幕的物理长度单位。

因为手机分辨率各不相同,一个200px宽的按钮在低分辨率的手机上可能将近占据满屏,而到了高分辨率的手机上可能只是占据屏幕的一半,谷歌当然也意识到了这个令人头痛的问题,于是为Android引进一套新的单位dp和sp。

dp是密度无关像素的意思,也称作dip,和px相比,它在不同的密度的屏幕中显示的比例将保持一致。

sp是可伸缩像素的意思,它采用了和dp同样的设计理念,解决文字大小的适配问题。

根据Android的规定,在160dpi的屏幕上,1dp等于1px,而在 320dpi的屏幕上,1dp就等于2px。因此,使用dp来指定控件的宽和高 ,就可以保证控件在不同的密度的屏幕中显示比例保持一致。如下图所示

这里写图片描述

定义尺寸资源,在res/values/dimens.xml:

<resources>        <dimen name="title">26dp</dimen>        <dimen name="content">16dp</dimen></resources>

使用

在Java代码中

    setTextSize(getResources().getDimensoin(R.layout.title));

在XML使用

<TextViem    android:id="@+id/textView1"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="@string/app_name"    android:textColor="@color/blue"    android:textSize="@dimen/title"/>

布局(Layout)资源

布局文件中是可以包含其它布局文件的,语法为:

    <include layout="@layout/xxx">

在java代码中使用布局资源

LayoutInflate//有上下文的情况加载布局View layout = View.inflate(this,R.layout.xxx,null);//在Activity中加载布局getLayoutInflate().inflate(R.layout.activity_main,null);    

数组资源

数组资源文件位于res/values目录下,根元素是标记,在该元素中,包括以下3个子元素
<array/>用于定义普通数组
<integer-array/>用于定义整数数组
<string-array>用于定义字符串数组

定义数组资源

<string-array name="item">        <item>程序</item>        <item>手机</item>        <item>通话</item></string-array>

使用数组资源

    String[] arr = getResources().getStringArray(R.array.items);    android:entries="@array/items"

Drawable资源

此为android应用中使用最为广泛,灵活的资源,它不紧可以直接使用图片作为资源,而且可以使用多种XML文件作为资源,只要这个XML文件可以被系统编译成Drawable子类对象,那么这个XML文件就可以作为Drawable资源。

    说明:Drawable资源通常保持在res/drawable目录中,实际上是保存在res/drawable-hdpi,drawable-ldpi,drawable-mdpi,drawable-xhdpi目录下,其中,分别为高分辨率,低分辨率,中分辨率,超高分辨率的图片。

在Activity中使用

setImageResource(R.drawable.head);

在XML中使用

android:src="@drawable/head"

StateListDrawable资源

StateListDrawable资源是定义在XML文件中Drawable对象,能根据状态来呈现不同的图像,例如:一个Butto按钮存在多种不同的状态(pressed,endabled,foused等)使用。
StateListDrawable资源可以为按钮的每个状态提供不同的按钮图片。
StateListDrawable资源文件同图片资源一样,但是一般放在res/drawable文件夹中,StateListDrawable资源文件的根元素为<selector></selector>在该元素中可以包括多个<item></item>元素。每个item元素可以设置以下两个属性:

android:drawable:    用于指定Drawable资源Android:state_xxx:   用于指定一个特定的状态

drawable文件夹需要自己建立

常用的状态属性如下:

Android:state_checked   表示是否处于勾选状态,属性值为true/falseAndroid:state_enabled   表示是否处于可用状态,属性值为true/falseAndroid:state_focused   表示是否处于获得焦点状态,属性值为true/falseAndroid:state_pressed   表示是否处于按下状态,属性值为true/falseAndroid:state_selected  表示是否处于被选中状态,属性为true/false

背景设置为颜色时,不能在drawable选择器中android:drawable中直接 设置颜色,必须在color中建立颜色代码,然后再用android:drawable=”@color/red”

ColorStateListDrawable颜色选择器

用来给TextView,Button,CheckBox等有文字的控件去根据状态改变颜色,存放于在color文件夹中,使用状态和drawable选择器一样,在item中设置为android:color=”@color/red”

color文件夹需要自己建立

ShapeDrawable资源

ShapeDrawable资源绘制一个特定的形状,如矩形,椭圆等。如果你想自己动态的绘制二位图形,那么我们就使用ShapeDrawable资源对象,用ShapeDrawable我们可以绘制我们想象的形状。一个ShapeDrawable需要一个Shape对象来管理呈现资源 到UI Screen,如果没有Shape设置,那么会默认使用RectShape对象。

ShapeDrawable被定义在一个XML文件中,以<shape>元素起始,其内部的每一个Drawable资源内嵌在<item>元素中

<?xml version="1.0" endcoding="UTF-8"?><shape xmlns:android="http://scheams.android.com/apk/res/android"    android:shape="oval">    <!-- 定义填充渐变颜色 -->    <gradient     android:startColor="#00f"     android:endColor="#00f"     android:angle="45"     android:type="sweep"/>    <!-- 设置内填充 -->    <padding android:left="7dp"    android:top="7dp"    android:right="7dp"    android:bottom="7dp" />    <!-- 设置圆角矩形 -->    <corners android:radius="8dp" /></shape>

Draw9-patch点九图

点九图,是Android开发中用到的一种特殊格式的图片,文件名以”.9.png“结尾。这种图片
能告诉程序,图像哪一部分可以被拉升,哪一部分不能被拉升需要保持原有比列。运用点九图
可以保证图片在不模糊变形的前提下做到自适应。点九图常用于对话框背景图片中
这里写图片描述
可以看出,不同两条消息字数不同,长度也不同,但它们采用了相同的背景样式,这个背景样式其实是同一张图片,用到的就是点九图的方式。
这里写图片描述
相较于普通的截图方式,点九图最为明显的区别就是图片不保留内容显示区域且自带一圈不成规律的黑边,正是这圈黑边提供了点九图的各个属性以适应各种情况。
这里写图片描述
就是图中的1、2部分规定了图像的可拉伸部分,而3、4部分规定了图像的内容区域。当实际程序中设定了对话框的宽高时,1、2部分就会被拉伸成所需的高和宽,呈现出于设计稿一样的视觉效果。

内容区域规定了可编辑区域。例如:对话框是圆角,文字需要被包裹在其中,如果4像3一样顶到两边,显示效果会如下图。

这里写图片描述
这里的文字是垂直居中显示,水平靠左显示。为了让文字被输入框完整包裹,缩短4的黑线到圆角以内,以显示效果的正常。

样式和主题资源

使用这些资源可以开发出各种风格的Android应用。

样式存放在res/values中

标记是<resources></resources>``<style></style>``<item></item>
在Android中支持继承样式:关键字是parent="basice"在一个样式继承另一个样式后,如果在这个子样式中,出现父样式相同的属性,将使用样式中定义的属性值
使用方法

style="@style/textViewStyle"

主题资源:

主题资源与样式资源类似,定义主题资源的资源文件,也保存在res/values目录中
标记是<resources></resources>``<style></style>``<item></item>
主题资源不能作用于单个的View组件,而是对所有Activity起作用。通常情况下,主题中定义的格式都是为了改变窗口外观而设置的,
如:定义一个用于改变的所有窗口背景的主题。可以使用以下的代码:

<style name="activityBackgroundTheme">    <item name="android:windowBackground">@drawable/ic_launcher</item></style>

使用在AndroidManifest.xml中,语法:

    <application android:theme="@style/activityBackgroundTheme"></application>    <activity android:theme="@style/activityBackgroundTheme"></activity>

在Java文件中使用

    setTheme(R.layout.activityBackgroundTheme);

注意,在Activty的onCreate()方法中,设置使用的主题资源时,一定要在为该Activity设置布局内容前设置(也就是setContentView()方法之前)否则将不起作用

使用原始XML资源

在Android中,XML资源存储在assets或者res\raw目录中,我们在Eclispse构建Android项目是,xml及raw目录初始是未创建的,如果我们需要用到原始的xml资源,需要我们自己手动构建文件夹,并存储我们的资源到指定的(这里的raw或者xml)目录中。有了xml资源,我们在应用中就需要解析它。在Android中,一般使用Pull解析。
Pull解析器的运行方式与SAX解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素触发相应的事件。跟SAX不同的是,Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型的节点值(即该节点相应的值)。

创建方式

方式一:使用XmlPullParserFactory工厂模式创建

XmlPullParserFactory pullFactory =XmlPullParserFactory.newInstance();XmlPullParser parser = pullFactory.newPullParser();

方式二: 使用Android工具类android.util.Xml类

XmlPullParser parser = Xml.newPullParser();

使用方法

  • 解析文件输入流
    打开文件输入流后,设置到解析类XmlPullParser中
    A 读取本地xml输入流的四种方式
    a.在res/xml目录下(推荐使用):

    XmlResourceParser xmlParser = this.getResources().getXml(R.xml.XXX);

    b.在res/xml、res/raw目录下:

     InputStream inputStream =this.getResources().openRawResource(R.xml.XXX);

    c.在assets文件夹下:

     InputStream inputStream = getResources().getAssets().open(fileName);

    d.在应用指定目录下(SDcard,应用data目录等):

     // path路径根据实际项目修改,此次获取SDcard根目录 String path = Environment.getExternalStorageDirectory().toString(); File xmlFlie = new File(path+fileName); InputStream inputStream = new FileInputStream(xmlFlie);

    B 设置到解析类XmlPullParser中

     parser.setInput(inStream, "UTF-8");

    1.产生第一个事件

    int eventType = parser.getEventType();

    只要不是文档结束事件,就一直循环,通过switch判断事件源

    eventType != XmlPullParser.END_DOCUMENT

    事件:

     XmlPullParser.START_DOCUMENT:触发开始文档事件 文档开始时创建集合XmlPullParser.START_TAG:触发开始元素事件使用getName获取name并创建对象使用getAttributeValue(index))获取每个属性值使用nextText()获取下一个Text节点XmlPullParser.END_TAG:触发结束元素事件添加进集合对象制空结束时将节点指向下一条next();

Android程序国际化

国际化(Internationalization)因为这个单词太长,有时也简称I18N 什么叫国际化,就是应
用程序根据当前系统的语言,将界面中的文字翻译成与之对应的语言,这样可以让程序更加通
用,Android可以通过资源文件非常方便的实现程序的国际化
在ANDROID中,通常的资源文件都是放置在res/values目录下的,为了给这个字符串资源实
现国际化,可以在Android项目的res目录下,创建对应于各个语言的资源文件夹,如:
默认: values如果系统是什么言语而对应的语言包没有,则使用这个语言包
简体中文:values-zh-rCN
繁体中文:values-zh-rTW
美式英文:values-en-Rus
然后在每个文件夹中创建一个对应的string.xml文件,并在该文件中定义对应的字符串即可。

原创粉丝点击