Android中App resources 主要包括:提供资源,访问资源,处理运行时的改变,本地化等内容。
1.Android中资源目录分布:
目录 资源类型
animator/ 存放属性动画
anim/ 存放补间动画
color 定义颜色
drawable Bitmap文件或者能够编译到,Bitmap文件,9patch,状态列表,动画图片等的XML文件
Layout 基本不见文件
Menu/ 定义Menu的,如可选Menu,上下文Menu,子Menu
raw 以原有形式保存的文件
values
-
- arrays.xml for resource arrays (typed arrays).
- colors.xml for color values
- dimens.xml for dimension values.
- strings.xml for string values.
- styles.xml for styles.
-
xml 任意的可以在运行时使用Resources.getXML读取的XML文件。不同配置的XML文件必须保存在该目录下,如searcha ble configuration
一、提供可以替换的资源。
你可以通过提供不同的资源,然手机在运行时,根据当前的配置来获取相应的合适的资源。Android中支持多种配置标示符,这样用户可以,通过一个破折号区分标示符的方式,将多个修饰符添加到一个目录名上。
比如: mcc310
mcc310-mnc004
mcc208-mnc00
Android在选择过程中,先会选择mcc(mobile country code)然后再选择mnc.(mobile network code)。意思是:手机在根据SIM卡的信息,先匹配国家的代码,然后再去匹配网络提供商的代码。这样就可以精确的查找具体要使用的配置了。
其他的如:Layout Direction ldrtl布局从右到左
ldltr布局从左到右(17才加入的,这也是默认值)
再如smallestWidth可以获得的最小的宽度。 sw<N>dp如你可以获取的最小的宽度为600那么,你可以定义一个sw600dp,这样手机在查看配置的时候就会使用这一项。
这里内容较多,其他的查看文档中APP resources部分。android-sdk-windows/docs/guide/topics/resources/providing-resources.html#AlternativeResources
****注意:在给这些文件起名的时候必须严格的按照,文档中的对这些修饰符的顺序进行,否则是错误的。
2.提供最好的资源对设备的兼容。在设置了多种的配置后,应该为手机设置一种默认的配置。
二、访问资源
1.访问资源的两种形式:
1)在代码中R.string.hello。
访问格式:
[<package_name>.]R.<resource_type>.<resource_name>
2)在XML文件中。访问格式:@drawable/ic_launcher
2.引用风格属性。用户可以使用当前应用主题中的风格属性。格式为:?[包名(可选)][资源类型(可选)/]资源名。实例如下
<EditText id="text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="?android:textColorSecondary" android:text="@string/hello_world" />3 .访问Android平台资源:Android中包含了很多标准的资源,如风格,主题,布局。想要访问这些资源需要使用android这个包。
setListAdapter
(new ArrayAdapter
<String>(this, android.R.layout.simple_list_item_1, myarray))
@Override public Object onRetainNonConfigurationInstance() { final MyDataObject data = collectMyLoadedData(); return data; }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance(); if (data == null) { data = loadMyData(); } ... }
<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } }上述两个操作完成了,当屏幕重新绘制的时候用户自己的处理。
R.animator.filename
In XML:
@[package:]animator/filename
<set android:ordering=["together" | "sequentially"]>
//对一个具体属性在一段时间上设定动画
<objectAnimator android:propertyName="string" android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["repeat" | "reverse"] android:valueType=["intType" | "floatType"]/> //在特定的时间段上执行动画 <animator android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["repeat" | "reverse"] android:valueType=["intType" | "floatType"]/> <set> ... </set> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@[package:]anim/interpolator_resource" android:shareInterpolator=["true" | "false"] >
<alpha android:fromAlpha="float" android:toAlpha="float" /> 表示ScaleAnimator
<scale
android:fromXScale="float" //图片从多大变大多大
android:toXScale="float" android:fromYScale="float" android:toYScale="float"
//表示图片以那个点为基准点
android:pivotX="float" android:pivotY="float" />在水平或者竖直方向上的移动。如果值为-100 到 100 %p表示相对于父窗口。如果没有%p表示是绝对位置移动表示一个TranslationAnimation <translate android:fromXDelta="float" android:toXDelta="float" android:fromYDelta="float" android:toYDelta="float" />
表示RotationAnimation,动画的旋转pivotX表示旋转的基准点。fromDegree是旋转的角度 <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float" /> <set> ... </set> </set>该xml文件必须有一个根元素。
android:interpolator
可以这样使用该元素。Interpolator class | Resource ID |
---|---|
AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator |
AccelerateInterpolator | @android:anim/accelerate_interpolator |
AnticipateInterpolator | @android:anim/anticipate_interpolator |
AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator |
BounceInterpolator | @android:anim/bounce_interpolator |
CycleInterpolator | @android:anim/cycle_interpolator |
DecelerateInterpolator | @android:anim/decelerate_interpolator |
LinearInterpolator | @android:anim/linear_interpolator |
OvershootInterpolator | @android:anim/overshoot_interpolator |
<set android:interpolator="@android:anim/accelerate_interpolator"> ... </set>可以使用上述的方法对其进行应用。
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /> </animation-list>
public void shit(View v)
{
ImageView rocketImage = (ImageView) findViewById(R.id.iv);
rocketImage.setBackgroundResource(R.anim.rocket);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();
}