getIdentifier获取资源id

一共有两种

        Log.e("drawable的id", R.drawable.ic_launcher + "");

        // 包名 + : + 资源文件夹名 + / +资源名
        id = getResources().getIdentifier(
                "com.example.androidtest:drawable/ic_launcher", null, null);
        Log.e("drawable的id", id + "");

        // 第一个参数为ID名,第二个为资源属性是ID或者是Drawable,第三个为包名
        id = getResources().getIdentifier("ic_launcher", "drawable",
                "com.example.androidtest");
        Log.e("drawable的id", id + "");

测试结果如下
这里写图片描述

但是通常情况下这么弄没什么意思,很多时候我们要做的是获取系统的资源id。

比如我们要获取SearchView里面的某个控件。

首先我想到的是反射,但是经过实验发现提示报错no emoty constructor。

也可以用getIdentifier获取了id以后再findViewById,所以我做了测试

        id = mSv.getContext().getResources()
                .getIdentifier("android:id/search_src_text", null, null);
        Log.e("SearchView中SearchAutoComplete的id", id + "");

结果可以取到这个id
这里写图片描述

然后我们就可以做点文章了

TextView textView = (TextView) mSv.findViewById(id);
textView.setText("111111111");

你可能感兴趣的:(Android)