zoukankan      html  css  js  c++  java
  • LayoutInflater.Factory 妙用

    LayoutInflater.Factory 可以调试 布局,你把下面的代码放到
    onCreate里面,然后再里面的下面的onCreateView里面加上断点,然后你就可以知道所有的view构造,所有的view的名字,不管是自定义还是系统的。
    感觉挺不错的。

    protected void setMenuBackGround() {
            LayoutInflater layoutInflater = getLayoutInflater();
            final LayoutInflater.Factory existingFactory = layoutInflater.getFactory();
    // use introspection to allow a new Factory to be set
            try {
                Field field = LayoutInflater.class.getDeclaredField("mFactorySet");
                field.setAccessible(true);
                field.setBoolean(layoutInflater, false);
                getLayoutInflater().setFactory(new LayoutInflater.Factory() {
                    @Override
                    public View onCreateView(String name, final Context context, AttributeSet attrs) {
                        if (name
    
                                .equalsIgnoreCase("android.support.v7.internal.view.menu.ListMenuItemView")) {
                            try {
                                LayoutInflater inflater = (LayoutInflater) context   .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                final View view = inflater.createView(name,
                                        null, attrs);
                                new Handler().post(new Runnable() {
                                    public void run() {
                                        ViewParent parent = view.getParent();
                                        ((ViewGroup) parent).setBackgroundResource(R.color.test);
    //                                    view.setBackgroundResource(R.color.test);
                                    }
                                });
                                return view;
                            } catch (InflateException e) {
                                e.printStackTrace();
                            } catch (ClassNotFoundException e) {
                                e.printStackTrace();
                            }
                        }
                        // do whatever you want with the null or non-null view
                        // such as expanding 'IconMenuItemView' and changing its style
                        // or anything else...
                        // and return the view
                        return null;
                    }
                });
            } catch (NoSuchFieldException e) {
                // ...
            } catch (IllegalArgumentException e) {
                // ...
            } catch (IllegalAccessException e) {
                // ...
            }
    
        }

    然后这个类也很强大,可以做很多事情,向下兼容。等等,替换东西等等。

  • 相关阅读:
    自兴人工智能——字典
    自兴人工智能——字符串
    列表与元组——自兴人工智能
    自兴人工智能——通用序列操作
    自兴人工智能——Python运算符和操作对象
    自兴人工智能------Python语言的变量认识及操作
    使用opencv-python框出人脸
    使用opencv-python录视频
    (自兴人工智能)python字符串
    (自兴人工智能)python元组
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/10568670.html
Copyright © 2011-2022 走看看