/**
* 利用getIdentifier()方法获取资源ID
* 方法描述:
* getIdentifier(String name, String defType, String defPackage)
* 第一个参数:资源的名称
* 第二个参数:资源的类型(drawable,string等)
* 第三个参数:包名
*/
public class MainActivity extends Activity {
private Context mContext;
private ImageView mImageView;
private TextView mTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
initUI();
}
private void initUI(){
mContext=this;
//获取图片资源的ID
mImageView=(ImageView) findViewById(R.id.imageView);
int drawableId = mContext.getResources().getIdentifier("ic_launcher","drawable", mContext.getPackageName());
mImageView.setImageResource(drawableId);
System.out.println("----> 获取到的图片资源 drawableId="+drawableId);
//获取字符串资源
mTextView=(TextView) findViewById(R.id.textView);
int stringId = mContext.getResources().getIdentifier("hello","string", mContext.getPackageName());
mTextView.setText(stringId);
System.out.println("----> 获取到的字符串资源 stringId="+stringId);
}
}
感觉使用此方法的前提在于 要多次使用一连串的图片,例如表示声音音量的增加,简单的一张图片无需麻烦
class GetIdentifierActivity : AppCompatActivity() {
private var time = 1
/**
* 进行七张图片的轮流展示v1-v7
*/
private val mhandler: Handler = object : Handler() {
override fun handleMessage(msg: Message?) {
super.handleMessage(msg)
var mipmapId = resources.getIdentifier("v" + msg?.what, "mipmap", packageName)
mGetIdentifierIv.setImageResource(mipmapId)
time++
if (time == 7) time = 1
sendEmptyMessageDelayed(time, 1000)//继续延迟1秒发送消息让Handler继续执行 形成循环
}
}
/**
* kotlin 中 Handler 简写
*/
private val mHandler2 = Handler {
var mipmapId = resources.getIdentifier("v" + it?.what, "mipmap", packageName)
mGetIdentifierIv.setImageResource(mipmapId)
time++
if (time == 7) time = 1
it.target.sendEmptyMessageDelayed(time, 1000)//继续延迟1秒发送消息让Handler继续执行 形成循环
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_get_identifier)
// mhandler.sendEmptyMessageDelayed(time, 1000)//继续延迟1秒发送消息让Handler继续执行 形成循环
mHandler2.sendEmptyMessageDelayed(time, 1000)//继续延迟1秒发送消息让Handler继续执行 形成循环
}
override fun onDestroy() {
super.onDestroy()
mhandler.removeCallbacksAndMessages(null)
}
}