我在xml布局中编写了一个TextView,现在让我们通过如下代码构造一个Button去替换xml布局中的TextView吧!
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LayoutInflaterCompat.setFactory2(inflater, new LayoutInflater.Factory2() {
            @Nullable
            @Override
            public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
                if (name.equals("TextView")) {
                    return new Button(context, attrs);
                }
                return null;
            }
            @Nullable
            @Override
            public View onCreateView(@NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
                return null;
            }
        });
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
正常代码效果: 
动态替换成Button之后的效果: 
拓展:我们可以通过这种方式进行APP的换肤或者更换View等骚操作!
~~后面看有时间的话给大家写一篇APP插件换肤功能的实现吧(主要是懒)。~~
以上代码必须写在super.onCreate(savedInstanceState);这句代码之前,否则会报错的哦~
By the way :系统向下兼容就是采用的这种方式,悄悄将View替换成AppCompatEditText、AppCompatImageView、AppCompatButton等兼容性控件,从而达到向下兼容的目的!
          本文由
          A lonely cat
          原创发布于
          阳光沙滩
          ,未经作者授权,禁止转载
        
 


 A lonely cat  回复 @断点-含光君
 A lonely cat  回复 @断点-含光君 


























