在Android中Context.getResource和R.id.XX方式访问资源的区别

在Android中,R文件会为res目录下的资源文件(String,图片等)自动生成Integer型的资源清单,即为每个资源生产唯一的一个ID,在java代码中可以通过R.id.XX来访问,但通过这种访问资源的方式只不过是得到了所要访问资源的一个整型的一个ID而已,并非是该资源的真实对象。
要想获得资源的真实对象,必须使用Android中的Resource类,该类可以由context对象获得。

例子:
在res/values/ 新建一个Integers.xml文件,该文件内容如下:

  
<resources>
    <integer name="myInteger">520integer>
resources>

该文件定义了一个整型的值,就像values/String.xml一样可以定义字符串的key-value一样。
接下来
在main_activity.xml中:

 "@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/myColor"
        android:textSize="@dimen/myDimen" />

     

在MainActivity中:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textView);
    }

    public void onButton(View view){
        int i=R.integer.myInteger;
        textView.setText(Integer.toString(i));
    }
}

运行结果:
点击Button后:
在Android中Context.getResource和R.id.XX方式访问资源的区别_第1张图片

接下来将MainActivity代码改变如下:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textView);
    }

    public void onButton(View view){
        int i=getResources().getInteger(R.integer.myInteger);
        textView.setText(Integer.toString( i));
    }
}

运行结果:
在Android中Context.getResource和R.id.XX方式访问资源的区别_第2张图片

结论:R.id.XX方法相当于获得一个人的身份证号码,而getResource(R.id.xX)相当于通过身份证号找到该身份证号所对应的人。

你可能感兴趣的:(Android)