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) {
                // ...
            }
    
        }

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

  • 相关阅读:
    hdu4135(容斥原理求质数,队列实现)
    poj2559(单调栈)
    poj2796(单调栈)
    icpc2018焦作Transport Ship(背包思想)
    icpc2018焦作Mathematical Curse(动态规划)
    2018icpc徐州OnlineA Hard to prepare
    icpc2018徐州OnlineG-Trace(线段树)
    hdu3499(分层图最短路 or 反向建图)
    MINE
    数论(Mathmatics)总结[1]
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/6647778.html
Copyright © 2011-2022 走看看