Android 反射 换一种方式编程

简介: Android 反射-换一种方式编程 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/59109933 本文出自【赵彦军的博客】上一次写了一篇文章 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 , 欢迎关注

相关文章
|
Java 调度 Android开发
构建高效Android应用:探究Kotlin多线程编程
【2月更文挑战第17天】 在现代移动开发领域,性能优化一直是开发者关注的焦点。特别是在Android平台上,合理利用多线程技术可以显著提升应用程序的响应性和用户体验。本文将深入探讨使用Kotlin进行Android多线程编程的策略与实践,旨在为开发者提供系统化的解决方案和性能提升技巧。我们将从基础概念入手,逐步介绍高级特性,并通过实际案例分析如何有效利用Kotlin协程、线程池以及异步任务处理机制来构建一个更加高效的Android应用。
|
Ubuntu 网络协议 Java
【Android平板编程】远程Ubuntu服务器code-server编程写代码
【Android平板编程】远程Ubuntu服务器code-server编程写代码
|
存储 Java Android开发
OpenCV3 安卓应用编程:1~6 全
OpenCV3 安卓应用编程:1~6 全
183 0
|
存储 算法 开发工具
OpenCV 安卓编程示例:1~6 全
OpenCV 安卓编程示例:1~6 全
383 0
|
Java 调度 数据库
Android 性能优化: 如何进行多线程编程以提高应用性能?
Android 性能优化: 如何进行多线程编程以提高应用性能?
230 0
|
2月前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
103 3
|
2月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
193 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
2月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
101 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
2月前
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
89 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
2月前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
109 4

热门文章

最新文章