Android 反射-换一种方式编程
Android 反射-换一种方式编程
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/59109933
本文出自【赵彦军的博客】
上一次写了一篇文章 Java 反射 使用总结 , 今天算是对反射的补充,只不过把反射用到了Android层面上。
首先创建工具类 ResourceUtils
package com.app.fanse;
import android.content.Context;
import android.graphics.drawable.Drawable;
public class ResourceUtils {
public static int getIdByName(Context context, String className, String name) {
return context.getResources().getIdentifier(name, className, context.getPackageName());
}
/**
* 获取布局文件的资源ID
* @param context
* @param name
* @return
*/
public static int getIdFromLayout(Context context, String name) {
return getIdByName(context, "layout", name);
}
/**
* 从控件中获取资源的ID
* @param context
* @param name
* @return
*/
public static int getIdFromId(Context context, String name) {
return getIdByName(context, "id", name);
}
/**
* 从 strings.xml 里面获取资源的ID
* @param context
* @param name
* @return
*/
public static int getIdFromString(Context context, String name) {
return getIdByName(context, "string", name);
}
/**
* 从 Drawable 里面获取资源的ID
* @param context
* @param name
* @return
*/
public static int getIdFromDrawable(Context context, String name) {
return getIdByName(context, "drawable", name);
}
/**
* 从 Mipmap 里面获取资源的ID
* @param context
* @param name
* @return
*/
public static int getIdFromMipmap(Context context, String name) {
return getIdByName(context, "mipmap", name);
}
/**
* 从 strings.xml 里面获取字符串
* @param context
* @param name
* @return
*/
public static String getResString(Context context, String name) {
return context.getString(getIdFromString(context, name));
}
/**
* 从Drawable目录获取 Drawable 对象
* @param context
* @param name
* @return
*/
public static Drawable getDrawableFromString(Context context, String name ){
return context.getResources().getDrawable( getIdFromDrawable( context , name ) ) ;
}
/**
* 从Mipmap目录获取 Drawable 对象
* @param context
* @param name
* @return
*/
public static Drawable getMipmapFromString(Context context, String name ){
return context.getResources().getDrawable( getIdFromMipmap( context , name ) ) ;
}
}
工具类的使用
首先新建布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.app.fanse.MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<ImageView
android:id="@+id/image"
android:layout_below="@id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
然后创建MainActivity
package com.app.fanse;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView textView ;
private ImageView imageView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//获取布局文件id
int layoutID = ResourceUtils.getIdFromLayout( this , "activity_main" ) ;
setContentView( layoutID );
//获取TextView 的 id
textView = (TextView) findViewById( ResourceUtils.getIdFromId( this , "tv"));
//获取 strings.xml 中的字符串
textView.setText( ResourceUtils.getResString( this , "tv_des"));
//获取ImageView 的 id
imageView = (ImageView) findViewById( ResourceUtils.getIdFromId( this , "image"));
//获取 Mipmap 里面的 Drawable
imageView.setImageDrawable( ResourceUtils.getMipmapFromString( this , "ic_launcher"));
//获取 Drawable 里面的 Drawable
imageView.setImageDrawable( ResourceUtils.getDrawableFromString( this , "ic_launcher"));
}
}
那么效果怎么样呢?请看效果图
个人微信号:zhaoyanjun125
, 欢迎关注
Android 反射-换一种方式编程的更多相关文章
- Android 数据存储五种方式
1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是: ① 使用Shared ...
- android 定位的四种方式
[原文] 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面总结了一下网络中现有对于介绍android定位的4种方式,希望对大家有帮助: android 定 ...
- 【转】在Android Studio中下载Android SDK的两种方式(Android Studio3.0、windows)
在Android Studio中下载Android SDK的两种方式(Android Studio3.0.windows) 方式一.设置HTTP Proxy1. 打开Settings2. 点击HTTP ...
- android 定位的几种方式介绍
[地理位置] android 定位的几种方式介绍 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面 www.androidkaifa.com 总结了一下网络 ...
- Android学习—下载Android SDK的两种方式
在Android Studio中下载Android SDK的两种方式 Android studio下载地址:http://www.android-studio.org/ 方式一.设置HTTP Prox ...
- 将Eclipse代码导入到Android Studio的两种方式
转: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0104/2259.html 说到使用Android Studio,除了新建 ...
- Android数据存储五种方式总结
本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用Cont ...
- Android视频播放的两种方式介绍
1.在Android 中播放视频的方式有两种: 第一种方式是使用MediaPlayer 结合SurfaceView 来播放,通过MediaPlayer来控制视频的播放.暂停.进度等: 通过Surfac ...
- Android事件处理的2种方式:监听器与回调
android组件的事件处理有2种方式: 1.基于监听器的事件处理方式:先定义组件,然后为组件设定监听器. 详见http://blog.csdn.net/jediael_lu/article/deta ...
随机推荐
- Java中String的split()方法的一些需要注意的地方
public String[] split(String regex, int limit) split函数是用于使用特定的切割符(regex)来分隔字符串成一个字符串数组,这里我就不讨论第二个参数( ...
- oracle系列--级联删除和级联更新
必须声明:此博客转载于Oracle外键级联删除和级联更新http://www.2cto.com/database/201507/417496.html 鉴于此前收藏的精彩博客无料被删除了,很是痛心,所 ...
- OpenCV点滴2
明天回家了-- 昨天去见了老师,去之前告诉自己不要紧张,去了后还是紧张了,语无伦次,很没礼貌--(不敢看老师的眼睛) 刚才妈打电话说让我早点回去,不知道为什么,在空荡荡的宿舍里听到妈的声音,眼泪会夺眶 ...
- js原生写的微博留言板有angularjs效果
1.HTML: <!DOCTYPE html><html><head lang="en"> <meta charset=" ...
- 1.4.2.3. SETUP(Core Data 应用程序实践指南)
初始化Core Data的三个方法: init,初始化托管对象模型.持久化存储协调器.托管对象上下文 - (id)init { ) { NSLog(@"Running %@ '%@'&quo ...
- 浅谈tomcat的配置及数据库连接池的配置
1.如何修改tomcat的端口 在某些情况下,可能需要修改tomcat监听的端口8080,比如: a.需要启动两份tomcat服务器 b.某个服务占用了8080端口(1433,1521,3306... ...
- mongoDB查询及游标
find文档 1.find简介 使用find查询集合中符合条件的子集合 db.test.blog.find(); 类似于sql查询 select * from test.blog 上面的查询是返回多有 ...
- IOS拒绝Adobe的六大理由
苹果与Adobe的关系由来已久.事实上,Adobe的创始人还在他们众所周知的小车库里时,我们就碰过面了.苹果是他们的第一个大客户.我们将他们的Postscript语言应用于当时最新的Laserwrit ...
- Canvas文本绘制
文字绘制: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 关于OI本地简易评测姬3.0发布的通知
本辣鸡蒟蒻的OI本地评测姬3.0出炉辣.[由wjc大蒟蒻编写,rxb神犇秒秒钟搞出编译器命令行,解决了评测姬编译一大难关并便携化,也为评测姬设计提出了宝贵的建议],目前支持pas和cpp(本辣鸡错了, ...