Android中APP resources

14 篇文章 0 订阅

Android中App resources 主要包括:提供资源,访问资源,处理运行时的改变,本地化等内容。

1.Android中资源目录分布:

目录                                                                   资源类型

animator/                                      存放属性动画

anim/                                                 存放补间动画

color                                            定义颜色

drawable                                  Bitmap文件或者能够编译到,Bitmap文件,9patch,状态列表,动画图片等的XML文件

Layout                       基本不见文件

Menu/                                        定义Menu的,如可选Menu,上下文Menu,子Menu

raw                                           以原有形式保存的文件

values                                                        

  • 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))
三、处理运行是的改变。
       Android中的一些设备配置能够在运行期间改变,如屏幕的朝向。当能够让Android重新运行Activity的改变发生的时候,Android会重新读取配置然后启动应用。这就使得你的应用程序能够自动的适应新的配置,使用新的配置重新加载你的应用,来满足新的设备配置。
     为了能够正确的处理一个重启,根据Android的生命周期来保存数据就显得十分重要了。Android在销毁Activity之前会先调用onSaveInstanceState()方法将应用程序现在的状态进行保存。这样就可以在onCreate或者onRestoreInstanceState期间保存状态了。
    如果你遇到重启你的应用并且要保存大量的数据的情况,这种情况是非常耗时并且给用户带来了不好的体验,在这种情况下你必须做一下两件事情。
   1)在配置改变期间保持一个有状态的对象。
(1)重写onRetainNonConfigurationInstance()方法,返回你想要保持的对象。这个方法是在onStop和onDestory这两个回调函数之间调用。
(2)当你的活动重新创建时调用getLastNonConfigurationInstance()覆盖你的对象。
实例
@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();
    }
    ...
}
   
    2)自己处理配置的改变。阻止系统重启你的Activity,使用一个回调函数处理配置的改变,这样你就可以手动的更新你的Activity了。
以屏幕改变为例:
     
<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();
    }
}
上述两个操作完成了,当屏幕重新绘制的时候用户自己的处理。
上述中的Configuration方法表示的当前所有的配置,而不仅仅是当前发生的配置。Android3.2以上Android:configChange="orientation|screenSize"必须这种来处理屏幕切换。

四、本地化资源。该部分省略。

五、资源类型
1.动画资源。两种类型的动画资源。
1)属性动画(Property)。通过改变在一段时间内使用Animator改变对象的属性值来创建动画。
就是在一段时间内修改对象的如:背景颜色,透明度。res/animtor/**.xml
使用的对象,ValueAnimator,ObjectAnimator和AnimatorSet等。
使用方式:
         In Java: 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>
2)视图动画(View)。其分为两类。res/anim/***.xml

(1)补间动画(Tween)。通过在一张图片上使用Animation,执行一系列的变换。
<?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文件必须有一个根元素。
Interpolators:插值。是一个定义在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>
可以使用上述的方法对其进行应用。


(2)帧动画(Frame)。使用AnimatorDrawable来展示一系列的图片创建该动画。

            
<?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>
AnimationDrawable rocketAnimation;
public void shit(View v)
{
ImageView rocketImage = (ImageView) findViewById(R.id.iv);
rocketImage.setBackgroundResource(R.anim.rocket);


rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值