zoukankan      html  css  js  c++  java
  • 通过资源名称得到资源id


    demo地址


    主要应用类

    package com.example.activitylibrary;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class LibraryActivity extends Activity {
    	String msg = "我是来自Jar中的Activity";
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(MResource.getIdByName(getApplication(), "layout", "activity_main"));
    		
    		TextView mTextView = (TextView) findViewById(MResource.getIdByName(getApplication(), "id", "textView1"));
    		mTextView.setText(msg);
    		
    		Button mButton = (Button) findViewById(MResource.getIdByName(getApplication(), "id", "button1"));
    		
    		mButton.setText(msg);
    		mButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				Toast.makeText(getApplication(), msg, Toast.LENGTH_SHORT).show();
    			}
    		});
    	}
    
    
    }
    
    具体工具类

    package com.example.activitylibrary;
    
    import android.content.Context;
    
    /**
     * 根据资源的名字获取其ID值
     * @author
     *
     */
    public class MResource {
    	public static int getIdByName(Context context, String className, String name) {
    		String packageName = context.getPackageName();
    		Class r = null;
    		int id = 0;
    		try {
    			r = Class.forName(packageName + ".R");
    
    			Class[] classes = r.getClasses();
    			Class desireClass = null;
    
    			for (int i = 0; i < classes.length; ++i) {
    				if (classes[i].getName().split("\$")[1].equals(className)) {
    					desireClass = classes[i];
    					break;
    				}
    			}
    
    			if (desireClass != null)
    				id = desireClass.getField(name).getInt(desireClass);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (IllegalArgumentException e) {
    			e.printStackTrace();
    		} catch (SecurityException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (NoSuchFieldException e) {
    			e.printStackTrace();
    		}
    
    		return id;
    	}
    }
    







  • 相关阅读:
    定义一个动态的二维数组?
    学习STL map, STL set之数据结构基础
    CMM
    详细解说STL string
    仔细选择你的容器
    C++字符串类string简析
    流氓软件及反流氓软件的技术分析
    标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
    C++资料下载
    unix系统操作命令大全
  • 原文地址:https://www.cnblogs.com/flyingsir/p/3983699.html
Copyright © 2011-2022 走看看