我在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
原创发布于
阳光沙滩
,未经作者授权,禁止转载