安卓(Android) 怎么从资源(Resource)获取布局(Layout)ID

2019年10月19日12:31:12安卓(Android) 怎么从资源(Resource)获取布局(Layout)ID已关闭评论 311 1136字阅读3分47秒

1.简介

安卓(Android) 怎么从资源(Resource)获取布局(Layout)ID?——请看下文。

2.示例代码

/**
 * 版权所有 编程十万个怎么办(www.tah1986.com)
 */



import java.lang.reflect.Field;
import java.util.HashMap;
import android.content.Context;

import android.content.res.Resources;
import android.util.SparseArray;

public class Main {
    private static HashMap<String, Integer> layoutIds;
    private static SparseArray<String> layoutNames;

    public static int getLayoutId(Context ctx, Resources res, String name)
            throws Exception {
        if (layoutIds == null) {
            getLayoutName(ctx, res, 0);
        }
        Integer i = layoutIds.get(name);
        return i == null ? 0 : i.intValue();
    }

    public static String getLayoutName(Context ctx, Resources res, int id)
            throws Exception {
        if (layoutIds == null || layoutNames == null) {
            HashMap<String, Integer> map = new HashMap<String, Integer>();
            SparseArray<String> map2 = new SparseArray<String>();

            String rClazz = ctx.getPackageName() + ".R.layout";
            Class<?> r = ctx.getClassLoader().loadClass(rClazz);
            for (Field f : r.getDeclaredFields()) {
                if (java.lang.reflect.Modifier.isStatic(f.getModifiers())
                        && f.getType() == Integer.TYPE) {
                    Integer val = (Integer) f.get(null);
                    map.put(f.getName(), val.intValue());
                    map2.put(val.intValue(), f.getName());
                }
            }

            layoutIds = map;
            layoutNames = map2;
        }

        return layoutNames.get(id);
    }
}

 
继续阅读
编程十万个怎么办