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

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

  • 相关阅读:
    洛谷P1600 天天爱跑步——树上差分
    洛谷P1155 双栈排序——思路题
    洛谷P2827 蚯蚓——思路题
    bzoj2763 [JLOI2011]飞行路线——分层图
    洛谷P2831 愤怒的小鸟——贪心?状压DP
    洛谷P1514 引水入城——dfs
    bzoj1854 [Scoi2010]游戏——匈牙利算法
    hdu1814 Peaceful Commission——2-SAT
    浙江理工大学: 铺地砖(3922)
    最大素因子(快)
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/10568670.html
Copyright © 2011-2022 走看看