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 反射-换一种方式编程的更多相关文章

  1. Android 数据存储五种方式

    1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是: ① 使用Shared ...

  2. android 定位的四种方式

    [原文]  开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面总结了一下网络中现有对于介绍android定位的4种方式,希望对大家有帮助: android 定 ...

  3. 【转】在Android Studio中下载Android SDK的两种方式(Android Studio3.0、windows)

    在Android Studio中下载Android SDK的两种方式(Android Studio3.0.windows) 方式一.设置HTTP Proxy1. 打开Settings2. 点击HTTP ...

  4. android 定位的几种方式介绍

    [地理位置] android 定位的几种方式介绍 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面 www.androidkaifa.com 总结了一下网络 ...

  5. Android学习—下载Android SDK的两种方式

    在Android Studio中下载Android SDK的两种方式 Android studio下载地址:http://www.android-studio.org/ 方式一.设置HTTP Prox ...

  6. 将Eclipse代码导入到Android Studio的两种方式

    转: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0104/2259.html 说到使用Android Studio,除了新建 ...

  7. Android数据存储五种方式总结

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据     2 文件存储数据       3 SQLite数据库存储数据 4 使用Cont ...

  8. Android视频播放的两种方式介绍

    1.在Android 中播放视频的方式有两种: 第一种方式是使用MediaPlayer 结合SurfaceView 来播放,通过MediaPlayer来控制视频的播放.暂停.进度等: 通过Surfac ...

  9. Android事件处理的2种方式:监听器与回调

    android组件的事件处理有2种方式: 1.基于监听器的事件处理方式:先定义组件,然后为组件设定监听器. 详见http://blog.csdn.net/jediael_lu/article/deta ...

随机推荐

  1. System.Web.UI.WebControls的Web服务器控件

    calendar[英][ˈkælɪndə(r)][美][ˈkæləndɚ]n.日历; 历法; 日程表; (一年之中的)重大事件(或重要日期)一览表; vt.把…记入日程表中; 把…列入表中; 为(文件 ...

  2. iOS 之 socket 与 http

    http连接:短连接,发送一次请求,服务器响应后连接就断开. socket连接:长连接,连接后长期保持连接状态.

  3. redhat5安装phantomjs

    Linux 64-bit Download phantomjs-2.1.1-linux-x86_64.tar.bz2 (22.3 MB) and extract the content. Note: ...

  4. Hdu-2112 HDU Today (单源多点最短路——Dijsktra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给你N个公交车站,起点,终点,各站之间的距离,求起点到终点之间的最短距离.(起点终点相 ...

  5. 交叉验证(cross validation)

    转自:http://www.vanjor.org/blog/2010/10/cross-validation/ 交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据 ...

  6. C# winform 按钮设置左边图标

    按钮设置操作如下: 1.先设置按钮图标,再设置图标的对齐方式 2.再设置按钮字体的对齐方式. 3.最后设置排列: TextImageRelation:设置为ImageBeforeText

  7. 记一次企业级爬虫系统升级改造(五):基于JieBaNet+Lucene.Net实现全文搜索

    实现效果: 上一篇文章有附全文搜索结果的设计图,下面截一张开发完成上线后的实图: 基本风格是模仿的百度搜索结果,绿色的分页略显小清新. 目前已采集并创建索引的文章约3W多篇,索引文件不算太大,查询速度 ...

  8. removeEventListener('2016');

    2016----最后一天工作日要快结束了,趁剩下的一点时间写篇博客玩玩,想到啥就写啥.总结下来就一句---累并快乐着... 先祝大家新年快乐!万事如意发大财. 一年跳了三家公司,上半年在家小公司干着整 ...

  9. 用反射技术替换工厂种的switch分支(14)

    首先给大家拜个晚年,祝大家新春快乐,万事如意,鸡年大吉. 好了,前面我们讲了很多的工厂模式,其中,有个很明显的特点,工厂中,有一个方法,里面有很多的swich case  分支,我们前面说过,我们可以 ...

  10. 微信小程序 JS动态修改样式

    微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...