zoukankan      html  css  js  c++  java
  • 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 , 欢迎关注

  • 相关阅读:
    LaTeX中表格多行显示的最简单设置方法
    获取Google音乐的具体信息(方便对Google音乐批量下载)
    移动硬盘提示格式化解决的方法,未正确删除导致不能读取文件提示格式化解决方式
    Android Service 服务(一)—— Service
    华为C8816电信版ROOT过程
    Linux crontab 命令格式与具体样例
    Python用subprocess的Popen来调用系统命令
    我的EJB学习历程
    接口和逻辑--多进程或单一进程
    uva 11354
  • 原文地址:https://www.cnblogs.com/zhaoyanjun/p/6484767.html
Copyright © 2011-2022 走看看