如何在Activity中覆盖getResources

时间:2011-07-31 13:01:15

标签: android resources override

我已尝试扩展Resources类,因此我可以覆盖getString(int id)方法,因此可以对我String中所需的每个Activity执行一些效果,此处为提供一些我的代码:

public class CustomResource extends Resources {

    public CustomResource(AssetManager assets, DisplayMetrics metrics, Configuration config) {
        super(assets, metrics, config);
    }

    @Override
    public String getString(int id) throws NotFoundException {
        return super.getString(id) + " $$";
    }

}

在我的活动中:

CustomResource customResource;
    @Override
    public Resources getResources() {
        if (customResource == null) {
            DisplayMetrics metrics = new DisplayMetrics();
            super.getWindowManager().getDefaultDisplay().getMetrics(metrics);
            customResource = new CustomResource(getAssets(), metrics, super.getResources().getConfiguration());
        }
        return customResource;
    }

Runtime上显示错误:

  

引起:java.lang.NullPointerException

     

at com.test.TestActivity.getResources(TestActivity.java:75)

并指出:

super.getWindowManager().getDefaultDisplay().getMetrics(metrics);

1 个答案:

答案 0 :(得分:4)

我解决了它:

@Override
    public Resources getResources() {
        if (customResource == null) {
            customResource = new CustomResource(super.getAssets(), super.getResources().getDisplayMetrics(), super
                    .getResources().getConfiguration());
        }

        return customResource;
    }

所有这一切,当我用户Strings但没有工作时,向XML中所需的所有setContentView(R.layout.sample)添加一些文字:(